SOAP メッセージから「VsDebuggerCausalityData」データを削除するにはどうすればよいですか?
-
09-06-2019 - |
質問
特定のクライアントからの受信 SOAP メッセージが無効としてマークされ、XML ファイアウォール デバイスによって拒否されるという問題が発生しています。Visual Studio によって追加のペイロード データが挿入されているようです。これらのメッセージには「VsDebuggerCausalityData」が表示されますが、問題のない別のクライアントから送信された他のメッセージには表示されないため、余分なデータが問題を引き起こしている可能性があると考えています。とにかく、それは出発点です。
私が抱いている質問は、クライアントがこの余分なデータを削除しながら VS から実行できるようにするにはどうすればよいでしょうか?そもそもなぜVSはそれをそこに入れているのでしょうか?
ありがとう。
解決
ちょっとグーグルで調べてみると、これを削除し、アプリケーションの web.config または app.config に追加する必要があることがわかります。
<configuration>
<system.diagnostics>
<switches>
<add name="Remote.Disable" value="1" />
</switches>
</system.diagnostics>
</configuration>
この情報は、受信サービスがクライアントまで追跡するのに役立つデバッグ情報です。(もしかしたら、少し推測してます)
- フォローアップを提案しました 質問 魔法のスイッチが実際にどこから来たのかを判断するために。
他のヒント
「VsDebuggerCausalityData」を削除するには、次のコマンドを使用して WCF の Visual Studio Diagnostic を停止する必要があります。
VS 2008-> c: Program Files Microsoft Visual Studio 9.0 Common7 IDE> VSDIAG_REGWCF.EXE -U VS 2010-> C: Program Files Microsoft Visual Studio 10.0
これがあなたや他の人たちに役立つことを願っています。
ダリルの答えは私にとっては役に立ちませんでした。各開発者は ggrocco の答えを実行する必要があります。
結局書いてしまった メッセージインスペクター, 、このコードを 送信リクエスト前 方法:
int limit = request.Headers.Count;
for(int i=0; i<limit; ++i)
{
if (request.Headers[i].Name.Equals("VsDebuggerCausalityData"))
{
request.Headers.RemoveAt(i);
break;
}
}
による回答に基づいて、 @Luiz Felipe
私はこのもう少し堅牢な解決策を思いつきました。
var vs = client.Endpoint.EndpointBehaviors.FirstOrDefault((i) => i.GetType().Namespace == "Microsoft.VisualStudio.Diagnostics.ServiceModelSink");
if (vs != null)
{
client.Endpoint.Behaviors.Remove(vs);
}
または、Visual Studio の「デバッグなしで開始」を使用します。