我有一个名为“ SQLInterfaceLibrary”的WCF服务,该服务通过WcfSvcHost.exe在计算机上运行。通过连接到URI“ http://localhost:8733/Design_Time_Addresses/SQLInterfaceLibrary/mex”,可以使用WcfTestClient.exe调用其所有端点。实际上,我什至可以通过使用我通过调用SvcUtil.exe生成的“ References.cs”文件直接从C#应用程序连接到它。但是,我的项目要求指出,必须从此服务访问IIS虚拟目录。我发现了另一个建议使用“ HttpContext.Current.Server.MapPath”功能的StackOverflow帖子。但是,当我从服务中调用此代码时,出现以下错误:
“ System.NullReferenceException:'对象引用未设置为对象的实例。'”
我认为这正在发生,因为我试图访问另一台计算机上的虚拟目录。有WCF编程经验的人可以证明这一点吗?您不需要提供详细的解释,只需是或否。谢谢!
答案 0 :(得分:0)
默认情况下,wcf的httpcontext为null,您应该在web.config中将aspNetCompatibilityEnabled设置为true。
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"
multipleSiteBindingsEnabled="true" />
如果httpcontext仍然为null,则可以将AspNetCompatibilityRequirements属性添加到服务中
[AspNetCompatibilityRequirements(RequirementsMode =AspNetCompatibilityRequirementsMode.Required)]
public class CalculatorService : ICalculatorService
{
public double Add(double a, double b)
{
HttpContext context= HttpContext.Current;
string dir = Directory.GetCurrentDirectory();
return a + b;
}
}