none
WCF是否有类似的成功案例?期待jillzhang等大牛给与指点。 RRS feed

  • 问题

  • 程序大概是这样子工作:

    从数据交换中心读取一些数据,并使用Socket发送到另外一台服务器数据分析的处理。

     

    两台服务器之都是用windwos64,千兆以太网,同一个网断内(同一个防火墙内),很早以前的版本使用的是C++Socket,现在的版本使用的是.net的Socket,想使用WCF的远程调用来替换掉.net的Socket。

     

     

    .net的Socket下的Socket一分钟Send大概5千次的样子,每次Send的包不大,大概十几K的样子。

    也就是说WCF的客户端每秒钟要调用5千次代理类。由于仅仅做简单的数据分析,所以30%以下的丢包可以忍受。

     

    初步想,OneWay,Singeletone,Throttling开大一些。但是菜鸟我对WCF实在是仅知道皮毛,想问一下群里的各位大牛有没有使用WCF作过类似的场景的应用。

     

    恳切各位大牛指点。

     

     

    PS:WCF有没有存储转发的实现,就是类似于总线或者是路由的想法,有一个Service来管理(注册,分发,验证等)所有的WCFService,Client不在直接与Service通讯,而是请求总线(或是是路由),总线(或是是路由)进一步负责将请求分发到相对应的Service,并将相应交给Client。(有点SOA的思想,或者说是一个简单的ESB的模拟)

     

     

    我的MSNTongue TiedtevenChennet@live.com

    2008年8月28日 15:59

答案

  •  

    我觉得你可以尝试一下netmsmq,客户端利用wcf,有消息全部发到msmq里面,service就直接从msmq里面拿,正好是oneway的,使用起来很合适。至于performance,应该问题不大,这里有一些详细的peformence数据:http://geekswithblogs.net/BVeldhoen/archive/2008/01/26/wcf-latency-test-harness.aspx
    2008年9月1日 9:00
  •  

    ,看了一下你的需求.总结一下你的需求有如下特点:

    1)       交互频繁

    2)       每次报文较大

    3)       允许丢包,精确度要求较低

    4)       有去无回,丢失多少,客户端无从知晓

    5)       在内网,网速快

    6)       路由中转功能

     

    根据上面的需求,有如下的几个方面需要注意

    1)  几十K的报文对wcf缺省设置来说,已经是非常大了,所以要想正常交互,需要所使用绑定的对数据报文大小的缺省限制。更改配置的时候,要对报文大小有比较准确的评估,尽量比较贴切,否则服务会有被攻击的危险

    2)  客户端可以不知道处理结果,采用IsOneWay能较少交互。

    3)  交互频繁,所以要求服务端处理能力增强。服务处理能力增强包含几个方面1)硬件处理能力 2 软件处理能力,硬件上面不用多说,软件方面如采用缓冲区,能间接提高服务端的处理能力。消息每次到达之后,先让其简单的进入待处理队列,然后专门用一个线程来对缓冲区待处理队列中消息进行处理。这样可以防止长时间的消息处理过程妨碍服务端和客户端的正常交互

    4)  内网中和外网的区别首先就是传输协议的选择上面,内网采用tcp协议,要比采用http协议上,效率高一些。

    而在消息的编码上,消息序列化之后,体积越小,传递越快,越有利交互,所以采用二进制编码比xml编码更好,如果交互不是过于频繁,而你的数据报文却异常大,那采用MTOM进行压缩编码,会更大的减小消息体积,但响应会增加处理,降低性能,故而你的应用环境,可以不采用。

    5WCF有中转的功能,详情可见http://msdn.microsoft.com/zh-cn/magazine/cc500646.aspx

    2008年9月1日 13:18

全部回复

  •  

    MSN  StevenChennet@live.com  不知道为什么上个帖子的S变成了头像。

     

     

    想知道WCF在OneWay下具体如何工作,想知道有没有更好的方法在每次WCF调用的时候,使用更简洁的序列化(不是序列化SOAP包,以减小每次调用的数据报的大小)

    2008年8月28日 16:04
  •  

    我觉得你可以尝试一下netmsmq,客户端利用wcf,有消息全部发到msmq里面,service就直接从msmq里面拿,正好是oneway的,使用起来很合适。至于performance,应该问题不大,这里有一些详细的peformence数据:http://geekswithblogs.net/BVeldhoen/archive/2008/01/26/wcf-latency-test-harness.aspx
    2008年9月1日 9:00
  •  

    ,看了一下你的需求.总结一下你的需求有如下特点:

    1)       交互频繁

    2)       每次报文较大

    3)       允许丢包,精确度要求较低

    4)       有去无回,丢失多少,客户端无从知晓

    5)       在内网,网速快

    6)       路由中转功能

     

    根据上面的需求,有如下的几个方面需要注意

    1)  几十K的报文对wcf缺省设置来说,已经是非常大了,所以要想正常交互,需要所使用绑定的对数据报文大小的缺省限制。更改配置的时候,要对报文大小有比较准确的评估,尽量比较贴切,否则服务会有被攻击的危险

    2)  客户端可以不知道处理结果,采用IsOneWay能较少交互。

    3)  交互频繁,所以要求服务端处理能力增强。服务处理能力增强包含几个方面1)硬件处理能力 2 软件处理能力,硬件上面不用多说,软件方面如采用缓冲区,能间接提高服务端的处理能力。消息每次到达之后,先让其简单的进入待处理队列,然后专门用一个线程来对缓冲区待处理队列中消息进行处理。这样可以防止长时间的消息处理过程妨碍服务端和客户端的正常交互

    4)  内网中和外网的区别首先就是传输协议的选择上面,内网采用tcp协议,要比采用http协议上,效率高一些。

    而在消息的编码上,消息序列化之后,体积越小,传递越快,越有利交互,所以采用二进制编码比xml编码更好,如果交互不是过于频繁,而你的数据报文却异常大,那采用MTOM进行压缩编码,会更大的减小消息体积,但响应会增加处理,降低性能,故而你的应用环境,可以不采用。

    5WCF有中转的功能,详情可见http://msdn.microsoft.com/zh-cn/magazine/cc500646.aspx

    2008年9月1日 13:18
  • 如果想要更多更快的处理数据,使用多个处理器,让你的处理过程支持分布是最好的方案,而要实现分布和负载平衡,路由是最好的选择。

    2008年9月1日 13:22
  • 非常感谢ls各位大牛的解答,这个项目正在进行中,以后又不懂得问题还需要各位大牛多多帮忙。

     

    谢谢。

    2008年9月2日 4:35