20

我遇到了一个问题,即来自一个特定客户端的传入 SOAP 消息被我们的 XML 防火墙设备标记为无效并被拒绝。似乎 Visual Studio 正在插入额外的有效负载数据;我们认为额外的数据可能会导致问题 b/c 我们在这些消息中看到“VsDebuggerCausalityData”,但在从没有问题的其他客户端发送的其他消息中却没有。无论如何,这是一个起点。

我的问题是客户端如何删除这些额外的数据并仍然从 VS 运行?为什么VS把它放在那里?

谢谢。

4

5 回答 5

18

要删除“VsDebuggerCausalityData”,您需要使用以下命令停止 WCF 的 Visual Studio 诊断:

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\Common7\IDE>vsdiag_regwcf.exe -u

我希望这对您或其他人有所帮助。

于 2010-06-18T00:57:03.103 回答
11

一个快速的谷歌显示这应该摆脱它,让他们将它添加到 web.config 或 app.config 为他们的应用程序。

<configuration>
  <system.diagnostics>
    <switches>
       <add name="Remote.Disable" value="1" />
    </switches>
  </system.diagnostics>
</configuration> 

该信息是调试信息,接收服务可以使用它来帮助将事情追溯到客户端。(也许,我猜了一点)

  • 我提出了一个后续问题,以确定魔术开关是否真正来自。
于 2008-08-28T20:27:38.450 回答
10

根据我的回答,@Luiz Felipe我想出了这个更强大的解决方案:

var vs = client.Endpoint.EndpointBehaviors.FirstOrDefault((i) => i.GetType().Namespace == "Microsoft.VisualStudio.Diagnostics.ServiceModelSink");
if (vs != null)
{
    client.Endpoint.Behaviors.Remove(vs);
}
于 2016-07-25T14:27:46.667 回答
7

达里尔的回答对我不起作用。每个开发者都要做ggrocco的回答。

我最终写了一个MessageInspector,并将这段代码添加到BeforeSendRequest方法中:

int limit = request.Headers.Count;
for(int i=0; i<limit; ++i)
{
    if (request.Headers[i].Name.Equals("VsDebuggerCausalityData"))
    {
        request.Headers.RemoveAt(i);
        break;
    }
}
于 2012-09-05T21:11:30.767 回答
2

或者在 Visual Studio 中使用“不调试就开始”。

于 2014-10-16T11:21:54.407 回答