2012-01-23 2 views
17

Ho un servizio Web (.svc) e sto cercando di acquisire la richiesta SOAP utilizzando un pezzo di codice trovato altrove su StackOverflow.HttpContext.Current è nullo nel mio servizio web

Il problema è che HttpContext.Current è nullo, quindi non è possibile accedere a Request.InputString.

Perché questo è nullo e come può essere risolto?

XmlDocument xmlSoapRequest = new XmlDocument(); 

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

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

risposta

41

Se si desidera utilizzare HttpContext perché il codice è già stato scritto in questo modo; è necessario aggiungere questo al vostro web.config in cui risiede il servizio:

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

Grazie utilizzare sotto. Abbiamo classi precostruite alla ricerca di httpcontext. Cordiali saluti Ho anche dovuto aggiungere la seguente precedente definizione della mia classe di servizio -> [AspNetCompatibilityRequirements (RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] – ejhost

14

Da uno dei Microsoft's pages sull'argomento.

HttpContext: la corrente è sempre nullo quando si accede da un servizio WCF . Utilizzare invece RequestContext.

1

corretta altro per leggere l'intestazione

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