Изменить префикс пространства имен WCF Envelope - PullRequest
4 голосов
/ 28 июня 2011

Мне было интересно, есть ли способ изменить префикс пространства имен для SOAP-запроса WCF?

Как видно из приведенного ниже примера, в конверте есть пространство имен "http://www.w3.org/2005/08/addressing" с префиксом" a ". Я хочу изменить это на" foo ". Как я могу это сделать. Примечание. У меня нет контроля над служебным кодом. Я могу создавать прокси-класс только из WSDL.

 <s:Envelope xmlns:a="http://www.w3.org/2005/08/addressing" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header>
<a:Action s:mustUnderstand="1">http://www.starstandards.org/webservices/2005/10/transport/operations/MyAction</a:Action>
<h:payloadManifest xmlns="http://www.starstandards.org/webservices/2005/10/transport" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:h="http://www.starstandards.org/webservices/2005/10/transport">
<manifest contentID="Content0" namespaceURI="http://www.starstandard.org/STAR/5" element="TESTMETHOD" version="5.2.4"></manifest>
</h:payloadManifest>
<h:Identity xmlns="urn:xxx/xxx/" xmlns:h="urn:xxx/xxx">
<SiteCode>XXXXXX</SiteCode>
</h:Identity>
<a:To>urn:xxx/xxx/Method1</a:To>
<MessageID xmlns="http://www.w3.org/2005/08/addressing">XXXXX</MessageID>
<a:ReplyTo>
<a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address>
</a:ReplyTo>
</s:Header>

Ответы [ 3 ]

2 голосов
/ 08 января 2014

Это можно сделать на стороне клиента или сервера с помощью MessageFormatter.Вы также можете изменить это с помощью MessageEncoder, но у этого есть много проблем.

В этой статье описывается, как сделать это на стороне сервера, используя MessageFormatter, а также обратную сторону MessageEncoder:

http://vanacosmin.ro/Articles/Read/WCFEnvelopeNamespacePrefix

Что вам нужно сделать, это применить клиентскую часть MessageFormatter (возможно, используя ApplyClientBehavior вместо ApplyDispatchBehavior).Кроме того, в пользовательском классе сообщений необходимо добавить пространство имен в качестве атрибута с префиксом «foo» (в методе OnWriteStartEnvelope).

К сожалению, нет простого способа (например, применения некоторых атрибутов), который бывнесите необходимые изменения.

0 голосов
/ 28 июня 2011

Я не знаю ни одного способа управления префиксами, которые WCF использует в своих стандартных кодировщиках сообщений.

Я думаю, вам придется написать собственный кодировщик сообщений, если вы хотите, чтобы сообщение в сети использовало разные префиксы.

0 голосов
/ 28 июня 2011

WCF предоставляет возможность контролировать большинство деталей SOAP Envelop с помощью контрактов сообщений. Но я сомневаюсь, что вы сможете что-то сделать с префиксом пространства имен .Однако вы можете контролировать пространство имен.

Пожалуйста, обратитесь к Использование контрактов сообщений

...