【问题标题】:Using WCF Message使用 WCF 消息
【发布时间】:2011-11-20 01:24:59
【问题描述】:

什么时候在 WCF 中使用 Message 类型是合适的,如下所示,我仍然感到困惑

[ServiceContract]
public interface IMyService
{
    [OperationContract]
    Message GetData();

    [OperationContract]
    void PutData(Message m);
}

你为什么要使用它?

你可以用它来串流吗?

谢谢

【问题讨论】:

    标签: wcf message


    【解决方案1】:

    MSDN 列出了直接使用消息类的原因如下:

    1. 当您需要另一种方法来创建传出消息内容(例如,直接从磁盘上的文件创建消息)而不是序列化 .NET Framework 对象时。

    2. 当您需要使用传入消息内容的替代方式时(例如,当您想要对原始 XML 内容应用 XSLT 转换时)而不是反序列化为 .NET Framework 对象时。

      李>
    3. 当您需要以通用方式处理消息而不考虑消息内容时(例如,在构建路由器、负载平衡器或发布-订阅系统时路由或转发消息时)。

    有关更多详细信息,请参阅Using the Message Class

    编辑以解决流媒体问题

    我在通过 google 进行的快速扫描中没有找到明确的答案,但上面的文章指出“客户端和服务之间的所有通信最终都会导致消息实例被发送和接收” - 所以我认为它可以直接使用在流媒体中。

    【讨论】:

    • 老实说,我无法理解这些答案。与第 1 点一样,为什么需要消息结构来从文件发送消息。你能加载文件并在一个简单的 .net 类中设置属性吗?对不起,如果我很慢
    • 另外,如果第 3 点可以澄清,那就太好了。不确定使用消息结构能否帮助您实现负载平衡?
    • 第 2 点的另一个很好的例子是 POX(Plain Old Xml)服务,在它到达之前您不确定其中的内容是什么。
    【解决方案2】:

    虽然 Tim 列出的理由是正确的,但我们直接在我们的服务中使用消息来创建一个超级路由服务。 我们有一项服务可以接受您向其抛出的任何方法调用,客户端由多个来源提供的 wsdls 生成。

    此服务将接收消息、检查其内容并相应地路由它。 所以在我看来,如果你想更接近线路,或者当你不知道传入消息的类型时,你可以直接使用签名中的消息。

    流是一个独立于消息签名的概念,wcf 在非常具体的绑定和安全机制下支持流,方法签名必须非常具体(即它应该返回/接受流)。同样在流式传输中,实际的数据流超出了肥皂消息的范围。

    【讨论】:

    • WCF4 不是引入了专门为 Routing 制作的 Routing Service 吗?或者消息数据包只是这样做的另一种方式
    • 确实如此,但仅对于其他 wcf 服务,我们有非常自定义的路由行为 ....
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-04
    • 1970-01-01
    • 1970-01-01
    • 2011-01-08
    • 2011-06-03
    相关资源
    最近更新 更多