4

現在、10 の異なる Web サービスを使用する社内エンタープライズ アプリがあります。それらは、WCF を使用する代わりに、古いスタイルの「Web 参照」を介して消費されます。

私が抱えている問題は、私が利用しているサービスを作成している社内の他のチームと協力しようとすることです。送受信している正確な SOAP メッセージをキャプチャする必要があることがわかりました。これは、SoapExtensionAttribute を拡張する新しい属性を作成することで実現しました。次に、生成された Reference.cs ファイルのサービス メソッドにその属性を追加します。これは機能しますが、2 つの理由で苦痛です。まず、これは生成されたファイルなので、そこで行うことはすべて上書きできます。次に、ファイルをチェックインする前に属性を削除することを覚えておく必要があります。

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

4

5 に答える 5

4

これはよくある質問のようです。私が尋ねたところ、ここを見るように言われました。

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

于 2008-11-20T22:11:24.283 に答える
3

これはウェブアプリですか?

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

そうすれば、デバッグモードのときに、ページの上部に折りたたみ可能なdivのようなものが表示され、そのページのすべてのSOAP通信が一覧表示されます。

于 2008-09-10T15:09:59.883 に答える
2

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

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

于 2008-09-10T15:17:51.207 に答える
1

これを行うには、SoapExtention を作成します。この記事をチェックしてください。

于 2008-09-10T14:41:25.240 に答える
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で申し訳ありませんが、それは私に強制されます。

于 2008-09-10T15:04:06.730 に答える