2008-09-10 6 views
4

Ich habe eine interne Enterprise-App, die derzeit 10 verschiedene Web-Services verbraucht. Sie werden über "Webreferenzen" im alten Stil konsumiert, anstatt WCF zu verwenden.Soap Logging in .net

Das Problem, das ich habe, versucht, mit den anderen Teams in der Firma zu arbeiten, die die Dienste erstelle, die ich aufnehme. Ich musste feststellen, dass ich genau die SOAP-Nachrichten erfassen musste, die ich sendete und empfing. Ich habe dies getan, indem ich ein neues Attribut erstellt habe, das SoapExtensionAttribute erweitert. Ich füge dieses Attribut dann einfach der Service-Methode in der generierten Reference.cs-Datei hinzu. Das funktioniert, ist aber aus zwei Gründen schmerzhaft. Erstens, es ist eine generierte Datei, also kann alles, was ich dort drin mache, überschrieben werden. Zweitens muss ich daran denken, das Attribut vor dem Einchecken der Datei zu entfernen.

Gibt es eine bessere Möglichkeit, die genauen SOAP-Nachrichten zu erfassen, die ich sende und empfange?

Antwort

4

Das scheint eine allgemeine Frage zu sein, als ich es gerade fragte und mir gesagt wurde, here zu schauen.

Sie müssen das generierte Reference.cs nicht bearbeiten. Sie können auf die Erweiterung in der app.config Ihrer Anwendung verweisen.

+0

Das sind tolle Neuigkeiten. Vielen Dank! – Rob

1

Sie können dies tun, indem Sie eine SoapExtentation erstellen. Überprüfen Sie this article.

0

Ich verwendete den folgenden Code ist ein Beispiel dafür, wie ich SOAP-Anforderungen in einer vor einiger Zeit geschriebenen Anwendung erfasst.

Die Einstellung des bedingten Attributs, wie ich es getan habe, lässt den Compiler den Methodenaufruf für alle Build-Typen außer debug ignorieren.

Sorry für die VB, es ist mir aufgezwungen.

+0

Ich sehe nicht, wo ich den Anruf auf diese Methode setzen würde. Ich sehe dort auch einen Verweis auf HttpContext. Ich mache den Webanforderungsaufruf und erhalte keinen. Oder, um es anders auszudrücken: Ich bin derjenige, der den Web-Service eines anderen konsumiert. Ich wurde nach dem genauen SOAP gefragt, den ich ihnen schickte, und nach der SOAP, die mir von ihrem Dienst zurückgegeben wurde. – Rob

+0

Ahh Sorry Rob, ich bin zu dem Schluss gekommen, dass du auf der WebService-Seite arbeitest. – NotMyself

3

Ist dies eine Webanwendung?

Platzieren Sie Ihren SoapExtension-Code in einem HTTPModule und injizieren Sie den SOAP-Envelope in den HTTPOutput-Stream.

Auf diese Weise sehe ich im Debug-Modus etwas wie ein reduzierbares div am oberen Rand der Seite, das alle SOAP-Kommunikation für diese Seite auflistet.

2

Ich habe ein HTTPModule bereits gebaut, dass dies tut, werde ich meine firmenspezifischen Informationen ausstreifen und die Goodies später heute veröffentlichen.

Überprüfen Sie auch SoapUI, es ist ein handliches Werkzeug.