从我最初的研究中可以看出,这需要我编写自己的自定义绑定,但我很难在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; }; } }
任何帮助将不胜感激.
@ ladislav的答案是一种方法,但我认为消息编码器设计的工作水平远低于您要实现的水平.它们本质上是将消息编码到和从底层流(即,消息如何在流上表示为字节)的部分.
我认为你需要做的是实现一个custom Message Formatter.特别是,因为你说要将消息提交给第三方,所以我认为这只是你需要实现的IClientMessageFormatter接口.另一个接口(IDispatchMessageFormatter)在服务器端使用.
您还需要实现一个适当的ServiceBehavior和OperationBehavior来将格式化程序安装到堆栈中,但是这样做的代码将是最小的(大部分代码将在实现上述接口中).
一旦实现,您可以使用“一种处理它们的方法”方法来测试和调试您的格式化程序.只需收到收到的消息并将其转储到控制台进行审查,然后再发回ebXML响应.您也可以使用相同的方法来建立单元测试.