2011-09-18 3 views
1

WCF를 사용하는 간단한 웹 서비스를 정의하는 코드 숨김 및 svc 파일이있는 웹 서비스가 있습니다.WCF 웹 서비스에서 파일의 전체 서버 경로에 액세스

분명히 svc 파일을 사용하여 서버에서 웹 서비스를 호스팅하고 있습니다.

내 서비스는 웹 서비스가있는 웹 응용 프로그램의 디렉토리에있는 파일에 액세스해야합니다.

고려하는 구조 다음

Web application root folder: MyWebApp 

MyWebApp (folder) -> Images (folder) 

MyWebApp (folder) -> App_Code (folder) 

MyWebApp (folder) -> WebServices (folder) 

MyWebApp (folder) -> Data (folder) 

MyWebApp (folder) -> Web.config (file) 

MyWebApp (folder) -> WebServices (folder) -> MyWebService.svc (file) 

MyWebApp (folder) -> App_Code (folder) -> MyWebService.cs (file) 

MyWebApp (folder) -> Data (folder) -> myfile.txt 

음. csharp 파일 codebehind 웹 서비스 파일에서 적절한 폴더에있는 xml 파일에 액세스하려고합니다.

어떻게해야합니까? 나는 물론 서버 개체에 대한 액세스 ...

감사합니다

답변

4

을 가질 수 없습니다 당신은 IIS에서 호스팅하는 경우

var root = HostingEnvironment.ApplicationPhysicalPath; 
var someFile = Path.Combine(root, "images", "test.png"); 

지금은 물론 이것은 당신이 이러한 코드를 작성하지 절대적으로 안했다되고 WCF 서비스 작업. 이 서비스는 생성자의 인수로 경로를 가지고 단순히 올바른 값을 전달하기 위해 의존성 주입 프레임 워크를 구성해야한다 :

public class MyService1: IMyService 
{ 
    private readonly string _path; 
    public MyService1(string path) 
    { 
     _path = path; 
    } 

    public void SomeServiceOperation() 
    { 
     var someFile = Path.Combine(_path, "images", "test.png"); 
     // TODO: do something with the file 
    } 
} 

지금 남아있는 모든 당신의 의존성 주입 프레임 워크를 연결할 수있는 custom IInstanceProvider을 작성하는 것입니다. 이렇게하면 서비스 코드가 더 이상/어디에서 서비스가 호스팅되는지에 의존하지 않게됩니다. 이 서비스가 필요로하는 것은 파일 경로 => 파일에 삽입하는 것입니다.

관련 문제