我正在尝试创建一个 WSTransfer 实现(我意识到 Roman Kiss 已经为 WCF 编写了一个 - 但它实际上并不符合规范)
由于 WSTransfer 是松散耦合的,我最终放弃了服务联系人的数据契约;所以每个创建消息看起来像消息创建(消息请求)。
这很好用,一切都很可爱,直到需要回击的时候。
我遇到的问题是构建 WSTransfer 响应的方式。以 create 为例,响应看起来像
<wxf:ResourceCreated>
<wsa:Address>....</wsa:Address>
<wsa:ReferenceProperties>
<xxx:MyID>....</xxx:MyId>
</wsa:ReferenceProperties>
</wxf:ResourceCreated>
如您所见,响应消息中有 3 个不同的 XML 命名空间。
现在,参与其中就很容易了;你可以(即使你没有公开它),创建一个数据合约并设置值并回火
Message response = Message.CreateMessage(request.Version,
"http://schemas.xmlsoap.org/ws/2004/09/transfer/CreateResponse",
resourceCreatedMessage);
但是,在为响应中的子元素设置不同的命名空间时会出现问题;看来 WCF 的数据合同不这样做。即使使用
[MessageBodyMember(Namespace="....")]
在响应类中的各个元素上似乎没有进行任何更改,所有内容都成为为合同类指定的命名空间的一部分。
那么如何将不同的命名空间应用于 WCF 消息中的各个元素?是通过合同,还是通过其他一些诡计多端的游戏?