首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何获取wcf应用程序的工作路径?

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

Stack Overflow用户
提问于 2009-04-26 19:43:34
回答 7查看 93.9K关注 0票数 69

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

如果我尝试

代码语言:javascript
复制
HttpContext.Current.Request.MapPath(HttpContext.Current.Request.ApplicationPath)

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

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

服务器未提供有意义的回复;这可能是由于约定不匹配、会话过早关闭或内部服务器错误造成的。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-06-02 21:49:43

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

代码语言:javascript
复制
string apPath = System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath;

和往常一样,YMMV。

票数 173
EN

Stack Overflow用户

发布于 2009-04-26 19:54:33

请看下面宋乐的回答。它比这个好多了。

更多信息后更新

下面的方法对我很有效。我通过Service1.svc在IIS上托管了一个新的WCF服务,对它进行了测试。

  1. <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>添加到web配置。<system.serviceModel>..</ ..>已存在。
  2. AspNetCompatibilityRequirementsAttribute添加到具有允许模式的服务。
  3. 使用HttpContext.Current.Server.MapPath(".");获取根目录。

下面是服务类的完整代码。我没有在IService1界面中做任何更改。

代码语言:javascript
复制
[AspNetCompatibilityRequirements(RequirementsMode=AspNetCompatibilityRequirementsMode.Allowed)]
public class Service1 : IService1
{
    public void DoWork()
    {
        HttpContext.Current.Server.MapPath(".");
    }
}

下面是web.config的摘录。

代码语言:javascript
复制
<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是HttpContext的等价物。OperationContext包含有关传入请求、传出响应以及其他内容的信息。

不过,最简单的方法可能是通过在web.config中切换来在ASP.Net compatibility mode中运行该服务。这将使您能够访问ASP.Net HttpContext。它将限制您只能使用*HttpBindings和IIS托管。要切换兼容模式,请将以下内容添加到web.config。

代码语言:javascript
复制
<system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
</system.serviceModel>
票数 31
EN

Stack Overflow用户

发布于 2010-03-02 04:18:45

这取决于你想要什么。我通常想解析一个像“~/文件夹/文件”这样的url。这就是有效的方法。

代码语言:javascript
复制
System.Web.Hosting.HostingEnvironment.MapPath("~/folder/file");
票数 20
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/791468

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档