Capturer les requêtes SOAP à un ASP.NET service web ASMX
Considérer l'exigence de journal entrant SAVON demandes à un ASP.NET service web ASMX. La tâche est de capturer le XML brut, d'être envoyé vers le service web.
Le message entrant doit être enregistré pour déboguer l'inspection. L'application a déjà sa propre bibliothèque de journalisation en cours d'utilisation, donc l'idéal d'utilisation serait quelque chose comme ceci:
//string or XML, it doesn't matter.
string incomingSoapRequest = GetSoapRequest();
Logger.LogMessage(incomingSoapRequest);
- Existe-il des solutions faciles à capturer le XML brut de réception de requêtes SOAP?
- Les événements qui géreriez-vous d'obtenir l'accès à cet objet et les propriétés pertinentes?
- Est-il de toute façon IIS peut capturer la demande entrante et pousser à un journal?
Vous devez vous connecter pour publier un commentaire.
Un moyen de capturer le message brut est d'utiliser SoapExtensions.
Une alternative à SoapExtensions est de mettre en œuvre IHttpModule et de saisir les flux d'entrée comme il s'en vient dans.
Vous pouvez également mettre en place en plaçant le code Mondial.asax.cs
J'ai une méthode Utilitaire dans mon service web que j'utilise pour capturer la demande lorsqu'il se passe quelque chose que je n'attends pas comme une exception non gérée.
Puis dans le web.config je stocker plusieurs AppSetting valeurs qui définissent ce niveau que je veux utiliser pour capturer la demande.
Ensuite dans mon Application_BeginRequest je l'ai modifié comme si. Notez que la Configuration est une classe statique-je créer pour lire des propriétés de web.config et dans d'autres domaines.
Vous savez que vous n'avez pas fait besoin de créer un
HttpModule
droit?Vous pouvez également lire le contenu de la
Request.InputStream
à partir de votre asmxWebMethod
.Ici est un article que j'ai écrit sur cette approche.
Code est comme suit:
Il n'est pas facile à faire. Vous aurez à mettre en œuvre un SoapExtension. L'exemple à la page précédente montre une extension qui peut être utilisé pour enregistrer les données.
Si vous aviez été en utilisant WCF, alors vous pouvez simplement définir la configuration de produire des journaux de messages.
Selon Steven de Salas, vous pouvez utiliser le
Request.InputStream
bien au sein de la webmethod. Je n'ai pas essayé cela, mais il dit qu'il travaille.J'ai envie de tester avec les protocoles http et https, et avec et sans autres SoapExtensions en cours d'exécution au même moment. Ce sont des choses qui peuvent influer sur ce genre de flux de la
InputStream
est réglé. Certains cours d'eau ne peut pas demander, par exemple, qui pourrait vous laisser avec un flux positionné après la fin des données, et que vous ne pouvez pas vous déplacer au début.