HttpContext.Current在我的Web服务中为null

时间:2012-01-23 18:34:34

标签: wcf web-services inputstream httpcontext

我有一个Web服务(.svc),我试图使用StackOverflow上其他地方找到的代码来捕获SOAP请求。

问题是HttpContext.Current为空,因此我无法访问Request.InputString

为什么这是空的,怎么解决?

XmlDocument xmlSoapRequest = new XmlDocument();

Stream receiveStream = HttpContext.Current.Request.InputStream;
receiveStream.Position = 0;

using (StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8))
{
    xmlSoapRequest.Load(readStream);
}

5 个答案:

答案 0 :(得分:45)

如果你想使用HttpContext,因为代码已经被写成了;您需要将此添加到您的服务所在的web.config中:

<configuration>
    <system.serviceModel>
        <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
    </system.serviceModel>
</configuration>

答案 1 :(得分:15)

关于这个主题的Microsoft's pages之一。

  

HttpContext:当从WCF中访问时,Current始终为null   服务。请改用RequestContext。

答案 2 :(得分:1)

正确使用以下用于读取标题

 var headers = OperationContext.Current.IncomingMessageProperties["httpRequest"];
                var apiToken = ((HttpRequestMessageProperty)headers).Headers["apiKey"];

答案 3 :(得分:0)

从Web服务访问时,

HttpContext.Current为null。改用HttpRuntime.Cache。

答案 4 :(得分:-4)

请参阅How to get working path of a wcf application? 使用System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath