2008-09-10 15 views
4

私は現在、10種類のWebサービスを使用している社内エンタープライズアプリケーションを持っています。 WCFを使用するのではなく、古いスタイルの「Web参照」で消費されます。石鹸のログイン.net

私が抱えている問題は、私が消費しているサービスをオーサリングしている会社の他のチームと協力しようとしていることです。私は送受信している正確なSOAPメッセージをキャプチャする必要があることを発見しました。 SoapExtensionAttributeを継承する新しい属性を作成してこれを行いました。次に、その属性を生成されたReference.csファイルのサービスメソッドに追加します。これはうまくいくが、2つの理由から痛い。まず、生成されたファイルなので、そこで何かを上書きすることができます。次に、ファイルをチェックインする前に属性を削除することを忘れないでください。

私は送受信している正確なSOAPメッセージをキャプチャするより良い方法がありますか?

答えて

4

これは私がちょうどそれに尋ねたのでよく聞かれるように、hereと言われました。

生成されたReference.csを編集する必要はありません。アプリケーションのapp.configで拡張機能を参照できます。

+0

これはすばらしいニュースです。ありがとう! – Rob

1

SoapExtentionを作成すると、これを行うことができます。 this articleを確認してください。

0

私は次のコードを使用して、後で書かれたアプリケーションでSOAPリクエストを取得した例を示します。

<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 

私が行ったように条件付き属性を設定すると、デバッグ以外のすべてのビルドタイプのメソッド呼び出しが無視されます。

VBで申し訳ありませんが、私に強制されます。

+0

このメソッドを呼び出す場所が表示されません。私はそこにHttpContextへの参照も見ています。私はWebリクエストを受け取りません。別の言い方をすると、私は他人のWebサービスを消費しています。私はそれらを送信していた正確なSOAPと、サービスから私に返されたSOAPを求められました。 – Rob

+0

Ahh Sorry Rob、私はあなたがWebService側で作業していたという結論に飛びついた。 – NotMyself

3

これはwebappですか?

SoapExtensionコードをHTTPModuleに置き、SOAPエンベロープをHTTPOutputストリームに挿入します。

このように、デバッグモードでは、ページ上部の折りたたみ可能なdivのようなものが表示され、そのページのすべてのSOAP通信がリストされます。

2

私はこれを行うHTTPModuleを既に構築しています。私は会社固有の情報を取り除き、後で本日投稿します。

また、便利なツールであるSoapUIもチェックしてください。