2012-01-23 27 views
17

Tengo un servicio web (.svc) y estoy tratando de capturar la solicitud SOAP utilizando un código encontrado en otro lugar en StackOverflow.HttpContext.Current es nulo en mi servicio web

El problema es que HttpContext.Current es nulo, por lo que no puedo acceder Request.InputString.

¿Por qué es nulo y cómo se puede resolver?

XmlDocument xmlSoapRequest = new XmlDocument(); 

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

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

Respuesta

41

Si desea utilizar HttpContext porque el código ya se ha escrito como tal; es necesario agregar esto a su web.config donde reside su servicio:

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

Gracias. Tenemos clases preconstruidas que buscan el httpcontext. FYI También tuve que agregar lo siguiente antes de la definición de mi clase de servicio -> [AspNetCompatibilityRequirements (RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] – ejhost

14

De uno de Microsoft's pages sobre el tema.

HttpContext: La corriente es siempre nula cuando se accede desde un servicio WCF . Use RequestContext en su lugar.

1

correcta bien utilizar a continuación para leer encabezado

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