4 Stimmen

Soap-Protokollierung in .net

Ich habe eine interne Unternehmensanwendung, die derzeit 10 verschiedene Webdienste in Anspruch nimmt. Sie werden über "Web-Referenzen" im alten Stil konsumiert, anstatt WCF zu verwenden.

Das Problem, das ich habe, ist die Zusammenarbeit mit den anderen Teams im Unternehmen, die die von mir genutzten Dienste erstellen. Ich habe festgestellt, dass ich die genauen SOAP-Nachrichten, die ich sende und empfange, erfassen muss. Zu diesem Zweck habe ich ein neues Attribut erstellt, das SoapExtensionAttribute erweitert. Dieses Attribut füge ich dann einfach der Servicemethode in der generierten Reference.cs-Datei hinzu. Das funktioniert, ist aber aus zwei Gründen mühsam. Erstens ist es eine generierte Datei, so dass alles, was ich dort tue, überschrieben werden kann. 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?

4voto

David Chappelle Punkte 1233

Dies scheint eine häufig gestellte Frage zu sein, denn ich habe sie gerade gestellt und mir wurde gesagt, ich solle nachsehen aquí .

Sie müssen die generierte Datei nicht bearbeiten. Reference.cs . Sie können die Erweiterung in Ihrer Anwendung referenzieren app.config .

3voto

FlySwat Punkte 165766

Ist dies eine Webanwendung?

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

Auf diese Weise kann ich mir im Debug-Modus so etwas wie ein ausklappbares Div am oberen Rand der Seite vorstellen, in dem die gesamte SOAP-Kommunikation für diese Seite aufgelistet ist.

2voto

FlySwat Punkte 165766

Ich habe bereits ein HTTPModul gebaut, das dies tut. Ich werde meine firmenspezifischen Informationen entfernen und die Goodies heute noch posten.

Probieren Sie auch SoapUI aus, ein praktisches Tool.

1voto

Jordi Punkte 551

Sie können dies tun, indem Sie eine SoapExtention erstellen. Prüfen Sie dieser Artikel .

0voto

NotMyself Punkte 27679

Der folgende Code ist ein Beispiel dafür, wie ich SOAP-Anfragen in einer vor einiger Zeit geschriebenen Anwendung erfasst habe.

<System.Diagnostics.Conditional("DEBUG")> _
    Private Sub CheckHTTPRequest(ByVal functionName As String)
        Dim e As New UTF8Encoding()

        Dim bytes As Long = Me.Context.Request.InputStream.Length
        Dim stream(bytes) As Byte
        Me.Context.Request.InputStream.Seek(0, IO.SeekOrigin.Begin)
        Me.Context.Request.InputStream.Read(stream, 0, CInt(bytes))

        Dim thishttpRequest As String = e.GetString(stream)

        My.Computer.FileSystem.WriteAllText("D:\SoapRequests\" & functionName & ".xml", thishttpRequest, False)

    End Sub

Das Setzen des bedingten Attributs, wie ich es getan habe, bewirkt, dass der Compiler den Methodenaufruf für alle Build-Typen außer Debug ignoriert.

Entschuldigung für das VB, es ist mir aufgezwungen worden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X