2012-01-23 2 views
17

У меня есть веб-служба (.svc), и я пытаюсь захватить запрос SOAP, используя фрагмент кода, найденный в другом месте в StackOverflow.HttpContext.Current имеет значение null в моей веб-службе

Проблема в том, что HttpContext.Current имеет значение null, поэтому я не могу получить доступ к 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); 
} 

ответ

41

Если вы хотите использовать HttpContext, потому что код уже написан так; вам нужно добавить к вашей web.config, где ваша служба находится:

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

Спасибо. У нас есть готовые классы, которые ищут httpcontext. FYI Мне также пришлось добавить следующее предыдущее определение класса сервиса -> [AspNetCompatibilityRequirements (RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] – ejhost

14

От одного из Microsoft's pages по вопросу.

HttpContext: ток всегда имеет значение null при доступе из службы WCF . Вместо этого используйте RequestContext.

1

Correct еще использовать ниже, чтобы прочитать Header

var headers = OperationContext.Current.IncomingMessageProperties["httpRequest"]; 
       var apiToken = ((HttpRequestMessageProperty)headers).Headers["apiKey"]; 
Смежные вопросы