xml – 如何修改WCF以不同(非SOAP)格式处理邮件?

前端之家收集整理的这篇文章主要介绍了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响应.您也可以使用相同的方法来建立单元测试.

猜你在找的XML相关文章