Как удалить данные "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);
}