2013-10-28 2 views
0

WCF рамки, я хочу изменить формат ответа от S: конверт мыло: конверт, вот решение (URL ссылка):WCF, мыло 1,1 заменить префикс

blogs.msdn.com/b/carlosfigueira /archive/2010/06/13/changing-prefixes-in-xml-responses.aspx

однако мыло для поддержки кода 1.2, мое требование - поддерживать мыло 1.1, которое не работает должным образом. Я изменил код ниже: из (WSHttpBinding)

Dictionary<string, string> namespaceToPrefixMapping = new Dictionary<string, string> 
{ 

    { "http://www.w3.org/2003/05/soap-envelope", "SOAP12-ENV" }, 
    { "http://www.w3.org/2005/08/addressing", "SOAP12-ADDR" }, 
}; 

к (BasicHttpBinding)

Dictionary<string, string> namespaceToPrefixMapping = new Dictionary<string, string> 
{ 

    { "http://schemas.xmlsoap.org/soap/envelope/", "soap" }, 
    { "http://www.w3.org/2005/08/addressing", "soap" }, 
}; 

таким образом, клиент будет ответ с сообщением ниже:

привязок клиента и службы могут быть несовпадающие ,

Как продолжить мой код?

+0

Не нужно менять префикс. Префикс не должен иметь значения для любого клиента, который понимает XML. Префикс не важен - важно только _namespace_, представленное префиксом. Если ваш клиент требует определенного префикса, то он очень сильно сломан и должен стыдиться самого себя. –

+0

Но требование - это префикс, я также не хочу менять префикс – flighting

+0

. Тогда вы либо неправильно поняли это требование, либо ваш клиент неправильно понимает XML. –

ответ

0

Вы должны взглянуть на эту статью:

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

Подход отличается от того, который у вас есть, потому что здесь происходит трансформация до отправки сообщения на каналы. Он использует MessageFormatter вместо MessageEncoder. Изменение сообщения с помощью MessageFormatter позволит вам использовать измененную версию на других уровнях (например, для ведения журнала), а также не будет проблем, если вам потребуется позже для добавления безопасности сообщений.

Смежные вопросы