locked
silverlight 长连接 RRS feed

  • 问题

  • 大家好:

           我的服务器端是一个跑几天的生产系统。开了一个http的80端口。(为了穿越wall)

           使用的是一个一直不被关断的http连接。 服务器上一有动作就要被传到客户端。xml 的数据格式。

           用winform是可以的,做一个httprequest,一直alive,然后有xml来了,我的reader就会读到。一直用while在读。

           我要用silverlight做一个基于web的客户端。但是发现都要response回来了才能处理。

     

          请问SL有没有类似sax处理xml 长连接处理的方式?

     


    zbo
    2010年11月20日 16:44

答案

  • 的确sl里使用httprequest只能异步操作,注意的地方有两点:

    1.silverlight对httprequest的跨域限制,(可以通过在域名根目标下放个sl的跨域策略文件)

    2.由于是异步通信所以一直连接着是不太可能的。所以和其他的http长连接有所区别。

    你的想法是正确的,最好的方法就是response完了后再读。


    2010年11月21日 9:05
  • Silverlight 不支持保持HTTP连接并持续处理接收数据。要想使用HTTP上的全双工通道,你只能选择Polling的方式,比如PollingDuplexHttpBinding,Comet方式应该也能工作,但是Silverlight没有现成的实现。

    不过任何一种实现都要求修改你当前的服务和客户端代码。若代码不允许被修改的话,我觉得Silverlight无法与之交互。

    谢谢,


    Mog Liang
    • 已建议为答案 Mog Liang 2010年11月26日 9:05
    • 取消建议作为答案 Mog Liang 2010年11月26日 9:06
    • 已标记为答案 Bob zhu - SJTU 2010年11月27日 16:16
    2010年11月23日 5:36

全部回复

  • sl同样是有httprequest的,不过一样是处理跨域问题。你要把跨域文件放到目标服务器的域名根目录下。不过还是建议你使用sl支持的socket的tcp连接。不过这个端口范围有所限制。
    2010年11月20日 17:12
  • 还有一种是silverlight 的pollingduplex技术。它是利用wcf的http进行长连接。在sl4下有很大的性能改进,资料参考:

    1.http://www.funsl.com/content/silverlight-3-wcf-%E5%8F%8C%E5%B7%A5%E9%80%9A%E4%BF%A1

    2.http://www.silverlightplayground.org/post/2009/04/07/Improve-PollingDuplex-reliability-with-Silverlight-30.aspx

    3.http://weblogs.asp.net/dwahlin/archive/2008/06/19/pushing-data-to-a-silverlight-client-with-a-wcf-duplex-service-part-ii.aspx


    2010年11月21日 5:16
  • 版主你好,谢谢你的回复。看你的回复,我想你知道我的情况了。

    但是还得补充一下,我的服务器端动不了,所以只能call服务器端开给我的http长连接。

    你说的httprequest'正是我要的东西。

     

    问题是httprequestwebclient 两个都是基于异步事件的,  所以我感觉是不是要等到整个response回来才能处理呢?

     

    还是可以一直连着,来一点就处理一点,sax的方式处理xml,我在winform里是可以的,不知道SL里有办法做吗?


    zbo
    2010年11月21日 8:57
  • 的确sl里使用httprequest只能异步操作,注意的地方有两点:

    1.silverlight对httprequest的跨域限制,(可以通过在域名根目标下放个sl的跨域策略文件)

    2.由于是异步通信所以一直连接着是不太可能的。所以和其他的http长连接有所区别。

    你的想法是正确的,最好的方法就是response完了后再读。


    2010年11月21日 9:05
  • 版主你好,

    跨域不是问题,我已经解决了。

    我是说,我没有办法改服务器端, 而服务器端是http开的长连接。

    原来是winform在和服务器端一直保持http连接。

    现在要改成web的方式,如果SL只能异步等待response回来的话,

     

    我的项目是不是就不能用SL了。

    顺便问一下,flex的urlstream可以做到一直读长连接吗?


    zbo
    2010年11月21日 10:25
  • Silverlight 不支持保持HTTP连接并持续处理接收数据。要想使用HTTP上的全双工通道,你只能选择Polling的方式,比如PollingDuplexHttpBinding,Comet方式应该也能工作,但是Silverlight没有现成的实现。

    不过任何一种实现都要求修改你当前的服务和客户端代码。若代码不允许被修改的话,我觉得Silverlight无法与之交互。

    谢谢,


    Mog Liang
    • 已建议为答案 Mog Liang 2010年11月26日 9:05
    • 取消建议作为答案 Mog Liang 2010年11月26日 9:06
    • 已标记为答案 Bob zhu - SJTU 2010年11月27日 16:16
    2010年11月23日 5:36
  • 兄弟们先别关这个帖子,让我想想,再问你。
    zbo
    2010年11月23日 6:54
  • 你若要用comet可以到http://www.codeproject.com上搜索comet的技术文章看下,老外已经弄的比较成熟了而且都有代码,前提是要懂英文,或者下些代码研究下。

    • 已建议为答案 Mog Liang 2010年11月26日 9:05
    2010年11月25日 9:21