Задать пространства имен в конверте SOAP для классов, созданных с помощью svcutil - PullRequest
1 голос
/ 15 марта 2012

Мы работаем над сторонней интеграцией с использованием предоставленных нам WSDL и XSD.Мы использовали svcutil для генерации всех прокси-классов, что прекрасно работает.Когда мы тестируем с помощью SoapUi, все работает нормально, однако, когда мы пытаемся отправить ответ нашему партнеру, он отклоняет сообщение SOAP, поскольку пространства имен определяются в заголовке и теле сообщения, а не в конверте SOAP.

К сожалению, я не могу заставить нашего партнера изменить свой процесс, чтобы он принимал наши сообщения (хотя я считаю, что они технически верны, поскольку мы определяем пространства имен до того, как мы используем их в XML, а не там, где они ожидают).Я знаю, что мог бы добавить инспектор сообщений, чтобы обработать SOAP-сообщение до того, как оно выйдет, но я бы не хотел переходить на этот уровень обработки.что мы могли бы установить, чтобы WCF выводил пространства имен на конверте вместо этого?

Что они хотят:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:h="http://theirdomain.org/service">
  <s:Header>
    <h:myType>
      <version>V1.0</version>
    </h:myType>
  </s:Header>
  <s:Body>
    <h:someElement />
  </s:Body>
</s:Envelope>

Что мы отправляем:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" >
  <s:Header>
    <h:myType xmlns:h="http://theirdomain.org/service">
      <version>V1.0</version>
    </h:myType>
  </s:Header>
  <s:Body>
    <h:someElement xmlns:h="http://theirdomain.org/service"/>
  </s:Body>
</s:Envelope>

1 Ответ

2 голосов
/ 17 декабря 2012

Я думаю, что правильной точкой расширения для этого может быть пользовательский кодировщик (см. http://msdn.microsoft.com/en-us/library/ms735115.aspx или примеры http://msdn.microsoft.com/en-us/library/ee960159.aspx, особенно первый).В пользовательском кодировщике вы сами пишете конверт SOAP (с правильными пространствами имен), а затем вызываете методы объекта Message для записи заголовков и тела (например, WriteBodyContents, см. http://msdn.microsoft.com/en-us/library/ms734675.aspx - в разделе «Написание сообщений».«).

...