none
WCF传输大量数据 RRS feed

  • 问题

  • 在传输较大数据时,默认下客户端会出现报错,提示数据包(>65535B)等相关信息。除了我们可以对config文件在客户端和服务
    端进行相关设置来控制外,不知道有没有更好的方式,还请斑竹多多指教。以达到可以根据数据量大小来传送,谢谢

    2009年7月31日 12:41

答案

  • 在传输较大数据时,默认下客户端会出现报错,提示数据包(>65535B)等相关信息。除了我们可以对config文件在客户端和服务
    端进行相关设置来控制外,不知道有没有更好的方式,还请斑竹多多指教。以达到可以根据数据量大小来传送,谢谢


    Hi,
       呵呵,不要客气。
       1)据我所知,你说的自动根据数据大小来传输是可以的。不过这个也是有范围的,在一定范围内是随便传输的。WCF的每个绑定都提供了MaxReceivedMessageSize ,默认是65535字节。你可以吧这个数据设置为一个最大整数。基本就不会影响你的传输了。
      可以再配置文件或者编程来配置这个属性。
      2)但是基于安全的考虑,WCF服务的提供者,要求对这个值有个大概估计。知道一个合理的数字,满足WCF服务交互数据需要即可。
      这样可以避免数据攻击。因为客户端可以一次传输大量的Soap消息,如果Soapheader里存储了超大数据,即使限制安全。WCF也要对Soap Header里的身份信息,缓存,解密,验证等等。
      比较消耗资源,如果客户端提交过多,可能导致服务器崩溃。
      3)针对大量的数据,WCF 提供了流模式,对传输进行优化。而且与WSE一样,WCF提供了对MTOM的支持,优化传输。
       
       WCF,本质也是基于XML消息传输,其作为面向服务的通信组件,在构建SOA服务程序的时候,对很多规则都进行了提升。
       这里要求设置,也是处于WCF数据交互的考虑。就像WCF安全必须使用证书加密一样,这个在早期的Web Service和WSE3.0里是不做要求的。
      我的意见仅作参考~
     呵呵,如果有新的答案,会继续补充~
    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
    欢迎访问老徐的中文技术博客:Welcome to My Chinese Technical Blog
    欢迎访问微软WCF中文技术论坛:Welcome to Microsoft Chinese WCF Forum
    欢迎访问微软WCF英文技术论坛:Welcome to Microsoft English WCF Forum
    • 已标记为答案 Xylon-tj 2009年8月6日 6:42
    2009年7月31日 13:37
    版主

全部回复

  • 在传输较大数据时,默认下客户端会出现报错,提示数据包(>65535B)等相关信息。除了我们可以对config文件在客户端和服务
    端进行相关设置来控制外,不知道有没有更好的方式,还请斑竹多多指教。以达到可以根据数据量大小来传送,谢谢


    Hi,
       呵呵,不要客气。
       1)据我所知,你说的自动根据数据大小来传输是可以的。不过这个也是有范围的,在一定范围内是随便传输的。WCF的每个绑定都提供了MaxReceivedMessageSize ,默认是65535字节。你可以吧这个数据设置为一个最大整数。基本就不会影响你的传输了。
      可以再配置文件或者编程来配置这个属性。
      2)但是基于安全的考虑,WCF服务的提供者,要求对这个值有个大概估计。知道一个合理的数字,满足WCF服务交互数据需要即可。
      这样可以避免数据攻击。因为客户端可以一次传输大量的Soap消息,如果Soapheader里存储了超大数据,即使限制安全。WCF也要对Soap Header里的身份信息,缓存,解密,验证等等。
      比较消耗资源,如果客户端提交过多,可能导致服务器崩溃。
      3)针对大量的数据,WCF 提供了流模式,对传输进行优化。而且与WSE一样,WCF提供了对MTOM的支持,优化传输。
       
       WCF,本质也是基于XML消息传输,其作为面向服务的通信组件,在构建SOA服务程序的时候,对很多规则都进行了提升。
       这里要求设置,也是处于WCF数据交互的考虑。就像WCF安全必须使用证书加密一样,这个在早期的Web Service和WSE3.0里是不做要求的。
      我的意见仅作参考~
     呵呵,如果有新的答案,会继续补充~
    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
    欢迎访问老徐的中文技术博客:Welcome to My Chinese Technical Blog
    欢迎访问微软WCF中文技术论坛:Welcome to Microsoft Chinese WCF Forum
    欢迎访问微软WCF英文技术论坛:Welcome to Microsoft English WCF Forum
    • 已标记为答案 Xylon-tj 2009年8月6日 6:42
    2009年7月31日 13:37
    版主
  • 3)针对大量的数据,WCF 提供了流模式,对传输进行优化。而且与WSE一样,WCF提供了对MTOM的支持,优化传输。

     流模式只支持BasicHttp , NetTcpBinding和NetNamedPipeBinding  

     感觉应用范围太窄, 如果我是WsHttp的话就不适用了, 我觉得用压缩来更好一些。
    学习者
    2009年8月1日 9:35
  • 3)针对大量的数据,WCF 提供了流模式,对传输进行优化。而且与WSE一样,WCF提供了对MTOM的支持,优化传输。

     流模式只支持BasicHttp , NetTcpBinding和NetNamedPipeBinding  

     感觉应用范围太窄, 如果我是WsHttp的话就不适用了, 我觉得用压缩来更好一些。
    学习者

    是的,呵呵。
       不支持也实属无奈之举啊。
       大量数据做签名运算,效率很低,而且耗费资源。WSHttpBinding,安全模式要使用证书签名和加密消息。对于大数据只有放弃了。
       压缩也是不错的改进措施。只能在一定程度上缩小数据规模。但是处理压缩也要耗费一点时间。
       而且XMl是机遇Base64编码的。
    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
    欢迎访问老徐的中文技术博客:Welcome to My Chinese Technical Blog
    欢迎访问微软WCF中文技术论坛:Welcome to Microsoft Chinese WCF Forum
    欢迎访问微软WCF英文技术论坛:Welcome to Microsoft English WCF Forum
    2009年8月1日 10:24
    版主