Ste*_*lip 68 wcf path httpcontext
我想获取WCF应用程序的工作文件夹.我怎么才能得到它?
如果我试试
HttpContext.Current.Request.MapPath(HttpContext.Current.Request.ApplicationPath)
Run Code Online (Sandbox Code Playgroud)
我得到一个空引用异常(Http.Current对象为null).
我对工作文件夹的意思是我的WCF服务正在运行的文件夹.如果我设置aspNetCompatibilityEnabled="true",我收到此错误:
服务器没有提供有意义的回复; 这可能是由于合同不匹配,过早的会话关闭或内部服务器错误造成的.
Don*_*yrd 171
我需要为IIS6托管的WCF应用程序提供相同的信息,我发现这对我有用:
string apPath = System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath;
Run Code Online (Sandbox Code Playgroud)
一如既往,YMMV.
Mik*_*nen 31
请参阅下面的ongle的答案.它比这个要好得多.
更多信息后更新
以下对我有用.我使用通过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(".");
}
}
Run Code Online (Sandbox Code Playgroud)
以下是web.config的摘录.
<system.serviceModel>
<!-- Added only the one line below -->
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
<!-- Everything else was left intact -->
<behaviors>
<!-- ... -->
</behaviors>
<services>
<!-- ... -->
</services>
</system.serviceModel>
Run Code Online (Sandbox Code Playgroud)
老答案
工作文件夹是什么意思?WCF服务可以以多种不同的方式托管,并且具有不同的端点,因此工作文件夹略微模糊.
您可以通过调用Directory.GetCurrentDirectory()来检索正常的"工作文件夹" .
HttpContext是一个ASP.Net对象.即使WCF可以在IIS上托管,它仍然不是ASP.Net,因此大多数ASP.Net技术默认不起作用.OperationContext是WCF与HttpContext的等价物.OperationContext包含有关传入请求,传出响应等信息.
虽然最简单的方法是在ASP.Net兼容模式下通过在web.config中切换它来运行服务.这应该可以让您访问ASP.Net HttpContext.它会限制你到*HttpBindings和IIS托管.要切换兼容模式,请将以下内容添加到web.config中.
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
</system.serviceModel>
Run Code Online (Sandbox Code Playgroud)
小智 20
取决于你想要的.我通常想要解析像"〜/ folder/file"这样的网址.这是有效的.
System.Web.Hosting.HostingEnvironment.MapPath("~/folder/file");
Run Code Online (Sandbox Code Playgroud)
Kho*_*yen 18
更一般的,我正在使用这个
AppDomain.CurrentDomain.BaseDirectory
Run Code Online (Sandbox Code Playgroud)
Ste*_*lip 12
aspNetCompatibilityEnabled ="true"应该已经解决了我的问题,但是我收到了这个错误:
服务器没有提供有意义的回复; 这可能是由于合同不匹配,过早的会话关闭或内部服务器错误造成的.
我通过从当前应用程序域获取运行WCF服务的物理路径解决了我的问题:
AppDomain.CurrentDomain.BaseDirectory
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
89741 次 |
| 最近记录: |