2008-11-20 22 views
15

Tengo una aplicación C# que es cliente de un servicio web. Uno de mis requisitos es permitir la captura del SOAP que envío, de modo que si hay un problema, puedo corregir el error o demostrar que el problema está en el servicio que estoy llamando.En C#, ¿cómo capturaría el SOAP utilizado en una llamada al servicio web?

Mi clase de servicio de proxy WebReference deriva de System.Web.Services.Protocols.SoapHttpClientProtocol como de costumbre. Si tuviera una varita mágica, haría que esta clase base implementara un evento OnPost que pudiera manejar para escribir el SOAP en mis registros y continuar.

Si no se ejecuta un sniffer de paquetes como WireShark, ¿hay alguna manera fácil de obtener este nivel de registro?

+0

Posible duplicado de [Llegar RAW Jabón de datos desde un cliente Web de referencia se ejecuta en ASP.net] (http://stackoverflow.com/questions/300674/getting-raw-soap-data- from-a-web-reference-client-running-in-asp-net) – gecco

Respuesta

15

Creo que lo que busca se aborda en esta pregunta:

Getting RAW Soap Data from a Web Reference Client running in ASP.net

Se ve como una gran cantidad de código sin embargo.

+0

SoapExtension no es la solución ideal (necesita gestionar el estado, afecta TODAS las llamadas ocultas y no solo las que desea registrar) pero funciona. ¡Gracias! –

1

Eche un vistazo a SoapExtensions.

Son lo que necesita.

+0

Gracias, eso es lo que necesitaba. –

4

Si la aplicación se está ejecutando en su cuadro local y el servicio web no está haciendo nada funky, puede utilizar Fiddler. Encienda IE, ejecute Fiddler, y verá que sus llamadas al servicio web también pasan por el proxy de violinista.

Acabo de utilizar esto esta mañana para hacer casi lo mismo. Tenía que demostrar que los datos que enviaba mi servicio web no estaban mal.

0

Por alguna razón, Fiddler no mostraba mis llamadas de servicio local cuando usaba el servidor de desarrollo ASP.NET que viene con Visual Studio. Para evitar esto, cambié el servicio web Url en tiempo de ejecución para que fuera el puerto Fiddler, solo para capturar el mensaje SOAP.

Esto se puede hacer desde la ventana Inmediato, por ejemplo:

myservice.Url = "localhost: 8888" (o lo que sea puerto que tiene violinista en)

que utiliza el cliente para poner a prueba las respuestas SoapUI .

2

Para ver este tráfico de violinista utilice el siguiente código:

mySoapHttpClientProtocol.Url = mySoapHttpClientProtocol.Url.Replace("localhost", "localhost.fiddler"); 

De lo contrario, construido en el servidor web de Visual Studio pasará por alto todos los proxies.

0

Solo "." agregue la dirección en su punto final después de "localhost". así:

 <endpoint address="http://localhost.:8868/FEInvoice.asmx" binding="basicHttpBinding" 
    bindingConfiguration="FEInvoice_Test" contract="EInvoiceIntegration.FEInvoiceSoap" 
    name="FEInvoice_Test" /> 
Cuestiones relacionadas