Клиент WCF не включает объявление XML в сообщение HTTP POST - PullRequest
4 голосов
/ 10 сентября 2010

В этом посте рассматривается последнее препятствие на пути к выполнению моей задачи по связи с маршрутизатором Cisco через агента управления веб-сервисами (WSMA), как описано здесь и здесь .Вам не придется читать эти посты, чтобы понять мой текущий вопрос.

Проблема заключается в следующем: у меня есть контракты на сервисы сборки и сообщений, соответствующие веб-сервисам маршрутизатора, и я настроил базовую HttpBinding и конечную точку.И используя фабрику каналов, я почти, но не совсем, успешно обмениваюсь данными с маршрутизатором.

В ответ я получаю сообщение об ошибке SOAP, утверждая, что «отсутствует ожидаемый тег или последовательность XML».Используя трассировку WCF, fiddler и отладку на маршрутизаторе и вручную отправляя сообщения по HTTP, я наконец выяснил, что происходит.

Агент WSMA на маршрутизаторе ожидает полезную нагрузку сообщения SOAP в HTTPзапрос на включение декларации XML.И WCF не отправляет один. Так просто.

Поэтому мой вопрос: Как я могу сделать WCF, используя basicHttpBinding, включить объявление XML в сообщение?

Для справки, моя конфигурация привязки выглядит следующим образом:

<basicHttpBinding>
  <binding name="BasicHttpBinding_IWsmaService" messageEncoding="Text" textEncoding="UTF-8" allowCookies="false">
    <security mode="TransportCredentialOnly">
      <transport clientCredentialType="Basic" proxyCredentialType="None" realm="level_15" />
    </security>
  </binding>
</basicHttpBinding>

(на случай, если вам интересно - да, я знаю, что отправляю учетные данные в виде открытого текста по незашифрованному транспорту)

1 Ответ

1 голос
/ 10 сентября 2010

Вам нужно будет создать собственный кодировщик.Проверьте образцы WCF .Приведенный пример показывает, как создать новый кодировщик с составом существующего.Вы будете использовать TextMessageEncodingBindingElement для создания внутреннего MessageEncoder.Ваш инструмент WriteMessage напишет объявление XML, а затем вызовет внутренний кодировщик для записи сериализованного сообщения.

Вам также нужно будет обернуть новый кодировщик в пользовательский элемент привязки и использовать его в пользовательском связывании вместе с HttpTransportBindingElement.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...