J'ai un service Web (.svc) et j'essaie de capturer la demande SOAP à l'aide d'un morceau de code trouvé ailleurs sur StackOverflow.
Le problème est que HttpContext.Current
est null, je ne peux donc pas accéder à Request.InputString
.
Pourquoi est-ce nul et comment peut-on le résoudre?
XmlDocument xmlSoapRequest = new XmlDocument();
Stream receiveStream = HttpContext.Current.Request.InputStream;
receiveStream.Position = 0;
using (StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8))
{
xmlSoapRequest.Load(readStream);
}
Si vous voulez utiliser HttpContext
parce que le code a déjà été écrit ainsi; vous devez ajouter ceci à votre web.config où réside votre service:
<configuration>
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
</system.serviceModel>
</configuration>
À partir de l'une des pages de Microsoft sur le sujet.
HttpContext: Current est toujours nul lorsqu'il est accédé depuis un service WCF . Utilisez RequestContext à la place.
Correct sinon utiliser ci-dessous pour lire en-tête
var headers = OperationContext.Current.IncomingMessageProperties["httpRequest"];
var apiToken = ((HttpRequestMessageProperty)headers).Headers["apiKey"];