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

StackOverflow https://stackoverflow.com/questions/32877

Вопрос

У меня проблема, когда входящие 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top