web-dev-qa-db-fra.com

En C #, comment pourrais-je capturer le SOAP utilisé dans un appel de service Web?

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?

15
David Chappelle

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.

15
Zachary Yates

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.

4
Moose

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.

2
bnieland

Jetez un oeil à SoapExtensions .

Ils sont ce dont vous avez besoin.

1
FlySwat

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" />
0
uzay95

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.

0
Rob Kent