2013-10-28 42 views
0

WCF框架,我想改变从s响应格式:信封肥皂:信封,这里是解决方案(URL链接):WCF,SOAP 1.1替换前缀

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

但是,代码支持soap 1.2,我的要求是支持soap 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更改消息可让您在其他图层中使用已更改的版本(例如,用于日志记录),并且在稍后需要添加消息安全性时也不会有问题。