更改名称空间前缀WCF信封

时间:2011-06-28 12:52:40

标签: wcf namespaces prefix

我想知道是否有更改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>

3 个答案:

答案 0 :(得分:2)

可以使用MessageFormatter在客户端或服务器端完成此操作。您也可以使用MessageEncoder更改它,但这有很多问题。

本文介绍如何使用MessageFormatter在服务器端执行此操作,以及MessageEncoder的缺点:

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

您需要做的是应用MessageFormatter客户端(可能使用ApplyClientBehavior而不是ApplyDispatchBehavior)。此外,在自定义消息类中,您需要将名称空间添加为属性,并使用“foo”前缀(在OnWriteStartEnvelope方法中)。

不幸的是,没有简单的方法(比如应用一些属性)可以进行所需的更改。

答案 1 :(得分:0)

WCF提供了使用消息协定控制大多数SOAP Envelop详细信息的功能。 但我怀疑你是否可以使用命名空间前缀做些什么。但是,您可以控制名称空间。

请参阅Using Message Contracts

答案 2 :(得分:0)

我不知道有任何方法可以控制WCF在其标准消息编码器中使用的前缀。

如果您希望线路上的消息使用不同的前缀,我认为您必须编写自定义消息编码器。