2008-09-10 6 views
4

J'ai une application d'entreprise interne qui consomme actuellement 10 services Web différents. Ils sont consommés via les anciennes "références Web" au lieu d'utiliser WCF.Soap logging in .net

Le problème que j'ai est d'essayer de travailler avec les autres équipes de l'entreprise qui créent les services que je consomme. J'ai trouvé que j'avais besoin de capturer les messages SOAP précis que j'envoie et que je reçois. Je l'ai fait en créant un nouvel attribut qui étend SoapExtensionAttribute. Je viens ensuite d'ajouter cet attribut à la méthode de service dans le fichier Reference.cs généré. Cela fonctionne, mais est douloureux pour deux raisons. Tout d'abord, c'est un fichier généré donc tout ce que je fais là-dedans peut être écrasé. Deuxièmement, je dois me rappeler de supprimer l'attribut avant de vérifier le fichier.

Y a-t-il un meilleur moyen de capturer les messages SOAP précis que j'envoie et que je reçois?

Répondre

4

Cela semble être une question fréquente, comme je viens de le demander et on m'a dit de regarder here. Il n'est pas nécessaire d'éditer le Reference.cs généré. Vous pouvez référencer l'extension dans les champs app.config de votre application.

+0

Maintenant, ce sont des nouvelles impressionnantes. Merci! – Rob

0

J'ai utilisé le code suivant est un exemple de comment j'ai capturé des demandes SOAP dans une application écrite tout à l'heure.

<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 

La définition de l'attribut conditionnel comme je l'ai fait fait que le compilateur ignore l'appel de méthode pour tous les types de construction autres que le débogage.

Désolé pour le VB, il est forcé sur moi.

+0

Je ne vois pas où je mettrais l'appel à cette méthode. Je vois aussi une référence à HttpContext là-dedans. Je fais l'appel de demande Web, ne pas en recevoir un. Ou, pour le dire autrement, je suis celui qui consomme le service web de quelqu'un d'autre. On m'a demandé le SOAP exact que je leur envoyais et le SOAP qui m'a été retourné par leur service. – Rob

+0

Ahh Désolé Rob, j'ai sauté à la conclusion que vous travailliez sur le côté WebService. – NotMyself

3

Est-ce une webapp?

Placez votre code SoapExtension dans un module HTTP et injectez l'enveloppe SOAP dans le flux HTTPOutput. De cette façon, en mode débogage, j'imagine quelque chose comme un div pliable en haut de la page qui liste toutes les communications SOAP pour cette page.

2

J'ai un HTTPModule déjà construit qui fait cela, je vais supprimer les informations spécifiques à mon entreprise et poster les goodies plus tard aujourd'hui.

Aussi, consultez SoapUI, c'est un outil pratique.