如何获得wcf应用程序的工作路径?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (19)

我想获得WCF应用程序的工作文件夹。我怎么才能得到它?

如果我尝试

HttpContext.Current.Request.MapPath(HttpContext.Current.Request.ApplicationPath)

我得到一个空引用异常(Http.Current对象为null)。

我的工作文件夹的含义是我的WCF服务运行的文件夹。如果我设置aspNetCompatibilityEnabled="true",我得到这个错误:

The server did not provide a meaningful reply; this might be caused by a contract mismatch, a premature session shutdown or an internal server error.

提问于
用户回答回答于

我需要我的IIS6托管的WCF应用程序的相同信息,我发现这对我有用:

string apPath = System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath;
用户回答回答于

以下为我工作。我通过Service1.svc在IIS上托管的新WCF服务对其进行了测试。

  1. 添加<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>到网络配置。<system.serviceModel>..</ ..>已经存在。
  2. 添加AspNetCompatibilityRequirementsAttribute到允许模式的服务。
  3. HttpContext.Current.Server.MapPath(".");得到的根目录。

以下是服务类的完整代码。我没有改变IService1接口。

[AspNetCompatibilityRequirements(RequirementsMode=AspNetCompatibilityRequirementsMode.Allowed)]
public class Service1 : IService1
{
    public void DoWork()
    {
        HttpContext.Current.Server.MapPath(".");
    }
}

以下是web.config的摘录。

<system.serviceModel>
    <!-- Added only the one line below -->
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>

    <!-- Everything else was left intact -->
    <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>

扫码关注云+社区