我有一个带有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对象...
三江源
答案 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来连接你的依赖注入框架。这样,您的服务代码就不再依赖于托管服务的方式/位置。该服务所需的全部是文件路径=>把它注入其中。