none
WCF 可以不使用soap消息协议吗?直接用TCP协议吗? RRS feed

  • 问题

  • 最近要使用WCF做一个平台,老师说soap消息协议效率不高,希望我直接使用tcp协议。

    请问高手,能做吗?大概需要怎么做?

    2010年7月22日 12:59

答案

  • 最近要使用WCF做一个平台,老师说soap消息协议效率不高,希望我直接使用tcp协议。

    请问高手,能做吗?大概需要怎么做?


    可以,使用netTcpBinding,然后

    1,自定义MessageEncoder,它负责把Message对象写入字节数组或从字节数组中读出Message对象.

    2,自定义MessageFormater,它负责把对象序列化到Message,或把Message反序列化成对象.

    • 已标记为答案 Mog Liang 2010年7月30日 3:06
    2010年7月23日 9:51
  • 老师的意思是soap消息协议是基于xml的,需要编码和解码,效率太低。

    他是想让我直接将对像序列化成二进制传输吗?但是wcf的通信是基于消息的啊?


    TCP和SOAP确实没有什么关系。

    TCP属于传输协议,这个属于网络通信协议。SOAP属于简单对象访问协议,这个是Web服务的核心协议。

    1. WCF里你可以使用TcpBinding,这个消息数据时基于优化的二进制格式。
    2. 其次可以是Remoting,如果客户端也基于.NET平台。这个支持二进制序列化与反序列化,取决于你使用的通道协议和序列化器。
    3. 因为你要传输对象。直接使用Socket通信效率是高,但是无法满足你传输对象的需要。

    建议前面2种

     


    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
     

    老徐的网站】:http://www.frankxulei.com/

    老徐的博客】:http://www.cnblogs.com/frank_xl/

    【WCF中文技术论坛】:微软WCF中文技术论坛
    【WCF英文技术论坛】:微软WCF英文技术论坛

    2010年7月25日 13:32
    版主

全部回复

  • 最近要使用WCF做一个平台,老师说soap消息协议效率不高,希望我直接使用tcp协议。

    请问高手,能做吗?大概需要怎么做?


    可以,使用netTcpBinding,然后

    1,自定义MessageEncoder,它负责把Message对象写入字节数组或从字节数组中读出Message对象.

    2,自定义MessageFormater,它负责把对象序列化到Message,或把Message反序列化成对象.

    • 已标记为答案 Mog Liang 2010年7月30日 3:06
    2010年7月23日 9:51
  • TCP的协议和SOAP属于两个层面。不要被老师的口误误导了

    TCPBinding 也可以用 SOAP Formatter的

    如果觉得自定义太麻烦  可以考虑直接用Json Formatter,

     


    成为 Microsoft V Dash了。。。 欢迎各位前辈同事在OCS加我
    2010年7月23日 11:42
  • 其实我不太了解SOAP消息协议在WCF的具体应用,是消息的格式,以及实现了将对像通过XmlSerializer进行序列化和反序列化吗?

    对象序列化到Message,Message是一个SOAP消息吧?

    2010年7月24日 7:31
  • 老师的意思是soap消息协议是基于xml的,需要编码和解码,效率太低。

    他是想让我直接将对像序列化成二进制传输吗?但是wcf的通信是基于消息的啊?

    2010年7月25日 6:35
  • 老师的意思是soap消息协议是基于xml的,需要编码和解码,效率太低。

    他是想让我直接将对像序列化成二进制传输吗?但是wcf的通信是基于消息的啊?


    你按照我说的,你先做MessageFormater,然后再做MessageEncoder,跟踪你的 object 到 Message ,再到 byte[] 的流程,你就明白了。
    2010年7月25日 10:45
  • 其实我不太了解SOAP消息协议在WCF的具体应用,是消息的格式,以及实现了将对像通过XmlSerializer进行序列化和反序列化吗?

    对象序列化到Message,Message是一个SOAP消息吧?


    WCF框架是定义了一个核心的类型 Message。

    Message对象不一定是SOAP消息,但是应该说支持SOAP消息格式。


    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
     

    老徐的网站】:http://www.frankxulei.com/

    老徐的博客】:http://www.cnblogs.com/frank_xl/

    【WCF中文技术论坛】:微软WCF中文技术论坛
    【WCF英文技术论坛】:微软WCF英文技术论坛

    2010年7月25日 13:27
    版主
  • 老师的意思是soap消息协议是基于xml的,需要编码和解码,效率太低。

    他是想让我直接将对像序列化成二进制传输吗?但是wcf的通信是基于消息的啊?


    TCP和SOAP确实没有什么关系。

    TCP属于传输协议,这个属于网络通信协议。SOAP属于简单对象访问协议,这个是Web服务的核心协议。

    1. WCF里你可以使用TcpBinding,这个消息数据时基于优化的二进制格式。
    2. 其次可以是Remoting,如果客户端也基于.NET平台。这个支持二进制序列化与反序列化,取决于你使用的通道协议和序列化器。
    3. 因为你要传输对象。直接使用Socket通信效率是高,但是无法满足你传输对象的需要。

    建议前面2种

     


    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
     

    老徐的网站】:http://www.frankxulei.com/

    老徐的博客】:http://www.cnblogs.com/frank_xl/

    【WCF中文技术论坛】:微软WCF中文技术论坛
    【WCF英文技术论坛】:微软WCF英文技术论坛

    2010年7月25日 13:32
    版主
  • 谢谢各位,我先按Galactica说的试试看,有问题再来请教大家。
    2010年7月26日 5:32