J'ai une application C # qui est un client d'un service Web. L’une de mes exigences est de permettre la capture du SOAP que j’envoie, afin que s’il y ait un problème, je puisse corriger le bogue ou démontrer que le problème se situe dans le service que j’appelle.
Ma classe de service proxy WebReference dérive de System.Web.Services.Protocols.SoapHttpClientProtocol
comme d'habitude. Si j'avais un coup de baguette magique, je ferais en sorte que cette classe de base mette en œuvre un événement OnPost
que je pourrais gérer pour écrire le SOAP dans mes journaux et continuer.
À moins d’exécuter un renifleur de paquets comme WireShark, existe-t-il un moyen simple d’obtenir ce niveau de journalisation?
Je pense que ce que vous recherchez est abordé dans cette question:
Obtention des données RAW Soap d'un client de référence Web s'exécutant en ASP.net
Cela ressemble à beaucoup de code cependant.
Si l'application est en cours d'exécution sur votre poste local et que le service Web ne fait rien de génial, vous pouvez utiliser Fiddler. Lancez Internet Explorer, lancez Fiddler, et vos appels de service Web passeront également par le proxy du fiddler.
Je viens de l'utiliser ce matin pour faire presque la même chose. Je devais prouver que les données envoyées par mon service Web n'étaient pas gâchées.
Pour voir ce trafic dans Fiddler, utilisez le code suivant:
mySoapHttpClientProtocol.Url = mySoapHttpClientProtocol.Url.Replace("localhost", "localhost.fiddler");
Sinon, le serveur Web intégré de Visual Studio contournera tous les serveurs mandataires.
Jetez un oeil à SoapExtensions .
Ils sont ce dont vous avez besoin.
Juste "." ajoutez l'adresse dans votre noeud final après "localhost". comme ceci:
<endpoint address="http://localhost.:8868/FEInvoice.asmx" binding="basicHttpBinding"
bindingConfiguration="FEInvoice_Test" contract="EInvoiceIntegration.FEInvoiceSoap"
name="FEInvoice_Test" />
Pour une raison quelconque, Fiddler n'affichait pas mes appels de service locaux lors de l'utilisation du serveur de développement ASP.NET fourni avec Visual Studio. Pour contourner ce problème, j'ai modifié l'URL du service Web lors de l'exécution pour qu'elle soit le port Fiddler, juste pour capturer le message SOAP.
Vous pouvez le faire à partir de la fenêtre Immédiat, par exemple:
myservice.Url = "localhost: 8888" (ou quel que soit le port sur lequel vous avez Fiddler)
J'ai utilisé le client SoapUI pour tester les réponses.