Как удалить данные “VsDebuggerCausalityData” из сообщения SOAP?
-
09-06-2019 - |
Вопрос
У меня проблема, когда входящие SOAP-сообщения от одного конкретного клиента помечаются как недопустимые и отклоняются нашим устройством брандмауэра XML.Похоже, что Visual Studio вставляет дополнительные данные полезной нагрузки;мы думаем, что дополнительные данные могут быть причиной проблемы, потому что мы видим "VsDebuggerCausalityData" в этих сообщениях, но не в других, отправленных от другого клиента, у которого нет проблемы.Во всяком случае, это отправная точка.
У меня вопрос в том, как клиент может удалить эти дополнительные данные и при этом по-прежнему запускаться из VS?Зачем VS вообще это туда кладет?
Спасибо.
Решение
Быстрый поиск в Google показывает, что это должно избавить от него, заставить их добавить его в web.config или app.config для своего приложения.
<configuration>
<system.diagnostics>
<switches>
<add name="Remote.Disable" value="1" />
</switches>
</system.diagnostics>
</configuration>
Эта информация представляет собой отладочную информацию, которую принимающая служба может использовать, чтобы помочь отследить данные до клиента.(может быть, я немного ошибаюсь)
- Я предложил последующий шаг вопрос чтобы определить, откуда на самом деле взялся волшебный переключатель.
Другие советы
Чтобы удалить '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
Я надеюсь, что это поможет вам или другим людям.
Ответ Дэррила на меня не подействовал.Каждый разработчик должен выполнить ответ ggrocco.
В конце концов я написал MessageInspector ( Инспектор сообщений ), и добавляя этот код в Запрос перед отправкой способ:
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.