请在下面查看ongle的答案。比这好得多。
更新后的更多信息
以下对我有用。我使用通过Service1.svc在IIS上托管的新WCF服务对其进行了测试。
- 添加
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
到Web配置。<system.serviceModel>..</ ..>
已经存在。
AspNetCompatibilityRequirementsAttribute
在允许模式下添加到服务。
- 用
HttpContext.Current.Server.MapPath(".");
得到的根目录。
下面是服务类的完整代码。我未在IService1接口中进行任何更改。
[AspNetCompatibilityRequirements(RequirementsMode=AspNetCompatibilityRequirementsMode.Allowed)]
public class Service1 : IService1
{
public void DoWork()
{
HttpContext.Current.Server.MapPath(".");
}
}
以下是web.config的摘录。
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
<behaviors>
</behaviors>
<services>
</services>
</system.serviceModel>
旧答案
您所说的工作文件夹是什么意思?WCF服务可以通过几种不同的方式以及不同的终结点进行托管,因此工作文件夹略有歧义。
您可以通过调用Directory.GetCurrentDirectory()来检索正常的“工作文件夹” 。
HttpContext是一个ASP.Net对象。即使WCF可以托管在IIS上,它仍然不是ASP.Net,因此,大多数ASP.Net技术默认都不起作用。OperationContext是WCF的HttpContext的等效项。OperationContext包含有关传入请求,传出响应等信息。
尽管最简单的方法可能是通过在web.config中切换来以ASP.Net兼容模式运行该服务。这应该使您可以访问ASP.Net HttpContext。它将限制您使用* HttpBindings和IIS托管。要切换兼容模式,请将以下内容添加到web.config中。
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
</system.serviceModel>