Как удалить данные "VsDebuggerCausalityData" из сообщения SOAP?

У меня проблема, когда входящие сообщения SOAP от одного конкретного клиента помечены как недопустимые и отклоненные нашим устройством брандмауэра XML. Похоже, что дополнительные данные полезной нагрузки вставляются Visual Studio; мы думаем, что дополнительные данные могут вызывать проблему b/c, мы видим "VsDebuggerCausalityData" в этих сообщениях, но не в других, отправленных с другого клиента, у которого нет проблемы. Во всяком случае, это отправная точка.

Вопрос, который у меня есть, заключается в том, как клиент может удалить эти дополнительные данные и все еще работать с VS? Почему VS вообще его помещает?

Спасибо.

Ответы

Ответ 1

Быстрый google показывает, что это должно избавиться от него, заставить их добавить его в web.config или app.config для своего приложения.

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

Информация - это отладочная информация, которую может использовать служба-получатель, чтобы помочь вернуть данные клиенту. (возможно, я немного догадываюсь)

  • Я предложил следующее question, чтобы определить, действительно ли появился волшебный переключатель.

Ответ 2

Для удаления 'VsDebuggerCausalityData' вам нужно остановить диагностику Visual Studio для WCF с помощью этой команды:

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

Я надеюсь, что это поможет вам или другим людям.

Ответ 3

Дэррил не помог мне. Каждый разработчик должен выполнить 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;
    }
}

Ответ 4

Или используйте "Начать без отладки" в Visual Studio.

Ответ 5

Основываясь на ответе @Luiz Felipe, я придумал это несколько более надежное решение:

var vs = client.Endpoint.EndpointBehaviors.FirstOrDefault((i) => i.GetType().Namespace == "Microsoft.VisualStudio.Diagnostics.ServiceModelSink");
if (vs != null)
{
    client.Endpoint.Behaviors.Remove(vs);
}