访问WCF Web服务中文件的完整服务器路径

时间:2011-09-18 15:46:04

标签: asp.net wcf iis

我有一个带有svc文件和代码隐藏的Web服务,它定义了一个使用WCF的简单Web服务。

显然,我正在使用svc文件在服务器上托管Web服务。

我的服务需要访问Web服务所在的Web应用程序目录中的文件。

考虑以下结构:

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文件代码隐藏的Web服务文件中,我想访问位于相应文件夹中的xml文件。

我该怎么做?我当然无法访问Server对象...

三江源

1 个答案:

答案 0 :(得分: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来连接你的依赖注入框架。这样,您的服务代码就不再依赖于托管服务的方式/位置。该服务所需的全部是文件路径=>把它注入其中。