a)例如有人在淘宝网页下订单,怎么通知使用winform的店主(通知内容:有人下单了)
a)想解决asp.net和winform通信的问题,
a)网页和winform 都是打开状态,不用开新窗口, 就像网页和客户端winform对话一样,
a)不能定期查询数据库,那样会挂掉数据库的, 也不能用javascript去打开winfrom窗口,
因为 winform 已经打开主界面了.
a)我想过 webservice 但不知道怎么通知winform有订单了 ,
a)传说wcf可以通信,但不知道如果有1个web网页下单,要通知10个 winform 客户端,有新消息,怎么做?
一个双工解决问题,前提是你的客户端跟服务器用的是WCF通信
这哥们貌似说的靠谱点,能详细点吗? 现在的情况是 asp.net 下订单后通知到winform客户端,有解吗?
是要实现asp.net的服务器到winform客户端, 不是 winform和winform的服务器哦. 如果设立中间层或中间服务器,考虑到效率或稳定性...
@mick100ey: 首先,你的ASP.net和winform可以使用一个WCF服务,WCF服务采用单线实例,当asp.net下订单后,在服务中触发通知接口,再由接通接口中的双工来提醒订阅了这个通知的客户端,winform要做的就是订阅通知就行了
主动通知winform这个比较难实现,不如改成winform主动去查询订单状态,可以隔一段时间就查询一次。
主动查询不可取,多久查一次? 5分钟? 10分钟? 数据库会有压力的,
定期查, 不能做到实时哦, 如果 你隔10分钟查一次, 太不及时了, 而且客户端数量多,服务器和数据库压力增长的厉害.
@mick100ey: 如果服务器主动推数据的话,那服务器需要记录所有的客户端的ip地址,岂不是更麻烦。客户端定时查询订单对数据库的压力能有多大呀,不知道你的客户端有多少。客户端可以定时查询订单,如果有更新,则做进一步操作,如果没更新,就什么都不做。为了体现实时性,可以把间隔时间设置的小一些。
楼上所言极是
才不是,你这winform不跟服务器建立连接的吗
不要因为做了b/c就忘记C/S怎么做的```
你客户端既然有连接,那服务器为什么不能实时通知客户端?
winform 有没有连接无所谓, 只想实现asp.net 服务器通知 winform 功能. 求解
这里虽然是asp.net服务器 但web是无状态的么, 怎么做到通知winform客户端呢?
可以仿照B/S中对实时通知的处理,客户端HTTP长链接GET请求,服务器阻塞请求直到有数据变化或超时返回,客户端处理数据并再次发起GET请求。
这个是在websocket还未出的时候用来处理实时数据的方式,比定时轮询节省服务器资源。好多AJAX都是这么用的。
winform中模拟一个HTTP client,用HTTP长链接,winform向服务器发出请求,服务器阻塞改请求直到有数据变化时将变化的数据返回winform client,winform接收到数据后,抛到其他线程处理,并再次发起HTTP长链接GET请求。
简单的可以使用socket
正解
除了socket你也可以做监视浏览器的winform程序,如迅雷,做一个BHO插件。
你怎么能有这样的想法呢, 浏览器和winform不在同一处,你监控谁呢? 客户在上海下单,坐在北京的店主要想得到 有人下单的消息, 你BHO 监控啥呢?
@mick100ey: 如果是这样的需求,我告诉你,除了客户端去主动查询数据,不可能有其它方式通知到客户端的。
@mick100ey: websocket出来之后,服务器可以通过websocket进行实时数据推送,更容易实现你需要的要求,在C#下就有相应的库:superwebsocket,服务器和客户端都可以使用。