如何从未在与虚拟目录相同的服务器上运行的WCF服务访问虚拟目录?

时间:2019-05-07 22:01:09

标签: c# wcf

我有一个名为“ 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编程经验的人可以证明这一点吗?您不需要提供详细的解释,只需是或否。谢谢!

1 个答案:

答案 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;
    }
}