xml – 如何修改WCF以不同(非SOAP)格式处理邮件?
我正在与WCF合作,与第三方公司交换信息.消息需要在与
ebXML specification匹配的信封中发送和接收.理想情况下,我希望尽可能多地使用WCF堆栈,并避免使用
one method to process them all方法,就像这种情况一样,这意味着将再次写入WCF的大部分基础架构.
从我最初的研究中可以看出,这需要我编写自己的自定义绑定,但我很难在MSDN的文档中找到清晰度. 我已经能够在各个实现中找到很多关于这些内容的详细文档,但是很少有关如何将它们全部结合在一起.看来,我对这些主题的看法也同样如此,Peiris和Mulder在“Pro WCF”中也没有提到这些话题. 我的目标是像下面这样. 发送和接收的消息必须格式如下,其中第一个元素的名称是要执行的操作的名称,子元素是请求消息的有效内容的格式为: <?xml version="1.0" encoding="UTF-8"?> <op:DoSomething xmlns:op="http://my.ebXML.schema.com" xmlns:payload="http://payload.company.com"> <op:AnObject> <payload:ImportantValue>42</payload:ImportantValue> </op:AnObject> </op:DoSomething> 答复将是: <?xml version="1.0" encoding="UTF-8"?> <op:AcknowledgementResponse xmlns:op="http://my.ebXML.schema.com" xmlns:payload="http://payload.company.com"> <op:ResponSEObject> <payload:Ok>True</payload:Ok> </op:ResponSEObject> </op:AcknowledgementResponse> 由于消息都由XML模式描述,我已经使用XSD.exe将它们转换为强类型对象.参见https://gist.github.com/740303的模式.请注意,这些是示例模式.我不能发布真正的模式,而不违反客户机密协议(也不希望我也是巨大的). 我现在想要能够编写服务实现如下: public class MyEndpoint : IMyEndpoint { public AcknowledgementResponse DoSomething(AnObject value) { return new AcknowledgementResponse { Ok = True; }; } } 任何帮助将不胜感激.
我不认为你需要做任何绑定.我假设你需要通过HTTP发送ebXML格式的消息?
@ ladislav的答案是一种方法,但我认为消息编码器设计的工作水平远低于您要实现的水平.它们本质上是将消息编码到和从底层流(即,消息如何在流上表示为字节)的部分. 我认为你需要做的是实现一个custom Message Formatter.特别是,因为你说要将消息提交给第三方,所以我认为这只是你需要实现的IClientMessageFormatter接口.另一个接口(IDispatchMessageFormatter)在服务器端使用. 您还需要实现一个适当的ServiceBehavior和OperationBehavior来将格式化程序安装到堆栈中,但是这样做的代码将是最小的(大部分代码将在实现上述接口中). 一旦实现,您可以使用“一种处理它们的方法”方法来测试和调试您的格式化程序.只需收到收到的消息并将其转储到控制台进行审查,然后再发回ebXML响应.您也可以使用相同的方法来建立单元测试. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |