2008-09-29 13 views
6

Estoy consumiendo un .NET WebService de terceros en mi aplicación cliente. Para fines de depuración, quiero capturar las solicitudes SOAP que se envían desde mi servidor. ¿Cómo voy a hacer esto? Esto se está haciendo en .NET 2.0 sin el uso de WCF o WSE..NET Soap Request de registro en el cliente

Respuesta

5

Si es por motivos de depuración, simplemente configuro la solicitud web para usar un proxy y envío la solicitud completa a través de fiddler (http://www.fiddlertool.com), entonces puede ver exactamente lo que se está transmitiendo a través del cable.

+0

Probé 6 formas diferentes de hacer esto en el código antes de renunciar y probar el violinista. Si lo hubiera leído y hubiera visto que es compatible con el tráfico cifrado, primero lo habría empezado. – carson

1

Hay muchas opciones que puede utilizar. Ciertamente hay algunas herramientas comerciales para esto (como SOAPScope), pero si solo buscas capturar los contenidos brutos de las solicitudes/respuestas, hay varias herramientas además de Fiddler (que ya mencionó Walden).

Personalmente, he sido un usuario de largo plazo de Simon Fell TcpTrace y YATT.

Si está interesado en realmente instrumentar el código para que pueda hacerlo solo (por ejemplo, registrando todo en un archivo o algo), entonces es posible que desee buscar la implementación de un SoapExtension en su servidor.

11

escribí un post sobre esto hace un tiempo titulado "Logging SOAP Messages in .NET".

La manera más fácil es utilizar las herramientas ya provistas con .NET.

1. extender la clase SoapExtension.

2. reemplazar el método ProcessMessage para obtener una salida completa de su solicitud SOAP, a continuación, enviar esta información a un archivo de texto o registro de eventos.

public class SoapMessageLogger : SoapExtension 
{ 
    //… 
    public override void ProcessMessage(SoapMessage message) 
    { 
    switch(message.Stage) 
    { 
     case SoapMessageStage.BeforeDeserialize: 
     LogResponse(message); break; 
     case SoapMessageStage.AfterSerialize: 
     LogResponse(message); break; 
     // Do nothing on other states 
     case SoapMessageStage.AfterDeserialize; 
     case SoapMessageStage.BeforeSerialize; 
     default: break; 
    } 
    } 
    //… 
} 
0

Tal Wireshark? Siempre lo uso para capturar el tráfico de mis aplicaciones.

Cuestiones relacionadas