我想获取WCF应用程序的工作文件夹。我怎么才能得到它呢?
如果我尝试
HttpContext.Current.Request.MapPath(HttpContext.Current.Request.ApplicationPath)
我得到一个空引用异常( Http.Current对象为空)。
我所说的工作文件夹就是我的WCF服务运行的文件夹。如果我设置了aspNetCompatibilityEnabled="true"
,我会得到这个错误:
服务器未提供有意义的回复;这可能是由于约定不匹配、会话过早关闭或内部服务器错误造成的。
发布于 2009-06-02 21:49:43
我需要为我的IIS6托管的WCF应用程序提供相同的信息,我发现这对我很有效:
string apPath = System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath;
和往常一样,YMMV。
发布于 2009-04-26 19:54:33
请看下面宋乐的回答。它比这个好多了。
更多信息后更新
下面的方法对我很有效。我通过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>
<!-- 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。
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
</system.serviceModel>
发布于 2010-03-02 04:18:45
这取决于你想要什么。我通常想解析一个像“~/文件夹/文件”这样的url。这就是有效的方法。
System.Web.Hosting.HostingEnvironment.MapPath("~/folder/file");
https://stackoverflow.com/questions/791468
复制相似问题