【发布时间】:2011-06-28 12:52:39
【问题描述】:
我想知道是否可以更改 WCF SOAP 请求的命名空间前缀?
正如您在下面的示例中所见,信封的命名空间“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>
【问题讨论】:
-
您认为为什么要更改前缀?它不应该对正确理解 XML 的任何东西产生任何影响。
-
我知道只是更改前缀不应该有任何区别,但是我要使用的服务,我无法控制它,也不知道它如何处理 SOAP 请求。目前,我收到与一个元素相关的服务器错误消息,该元素可以预期前缀。它的消除过程。谢谢
-
感谢所有回复。我认为可以实现这一点的一种方法是使用 IClientMessageInspector、IEndpointBehavior,如其所示 social.technet.microsoft.com/wiki/contents/articles/…。在发送请求之前触发其中一个事件。此时,您可以获得 Row SOAP 消息并进行操作(可能不建议这样做)。希望这对其他人有所帮助。
-
我对此表示怀疑。在客户端消息检查器中,您无法访问原始 SOAP 消息,您会获得一个 Message 对象(其中消息头表示为 Header 对象的集合)之前它们已经通过编码器将确定消息在其有线表示中的样子。我看不出你是如何从这里夺取对命名空间前缀的控制权......但无论如何都要尝试,如果你找到办法,请发布更新。
标签: wcf namespaces prefix