Architecture 客户端(桌面应用程序)提取数据…但我希望服务器(web应用程序)推送数据

Architecture 客户端(桌面应用程序)提取数据…但我希望服务器(web应用程序)推送数据,architecture,.net-2.0,client-server,server-push,Architecture,.net 2.0,Client Server,Server Push,我有一个客户机-服务器应用程序,其中服务器本质上是一个ASP.NETWeb应用程序,分布式客户机是桌面应用程序 当客户端有新数据时,客户端需要从服务器接收一些数据。现在,这样做的方式是——客户机每x分钟(比如2分钟)查询一次web服务,并不断检查客户机是否有新数据 理想情况下,它的工作方式应该是,桌面应用程序应该在更新可用时接收更新,而不需要从服务器获取更新;相反,服务器应该能够推送到客户端 考虑到解决方案的体系结构,web应用程序需要将数据推送到同一网络(LAN)中的桌面应用程序(客户端)?如

我有一个客户机-服务器应用程序,其中服务器本质上是一个ASP.NETWeb应用程序,分布式客户机是桌面应用程序

当客户端有新数据时,客户端需要从服务器接收一些数据。现在,这样做的方式是——客户机每x分钟(比如2分钟)查询一次web服务,并不断检查客户机是否有新数据

理想情况下,它的工作方式应该是,桌面应用程序应该在更新可用时接收更新,而不需要从服务器获取更新;相反,服务器应该能够推送到客户端


考虑到解决方案的体系结构,web应用程序需要将数据推送到同一网络(LAN)中的桌面应用程序(客户端)?

如果您可以保持套接字打开,客户端可以连接到服务器,服务器可以在适当时将数据推下套接字。没有理由认为发起连接的一方必须始终是发起数据传输的一方。

您可以使用WCF回调-这是一种web服务,您可以订阅来自客户端的通知,服务器将向订阅的客户端发送消息。我在我的博客上有一篇文章

您可能会对这个项目感兴趣。您所描述的内容听起来像是Comet应用程序—将服务器推送到客户端。

您所描述的是“服务器推送”,现在通常称之为“Comet”。在网络搜索中使用这些关键词应该可以找到很多有用的信息


最常见的方法是“挂接”。客户端向特定URL发送GET请求,服务器接受连接,但延迟发送响应,直到有数据要发送为止。当客户端收到响应时,它会发送另一个GET,以便为另一条消息做好准备。

签出;这是一个适用于ASP.NET/IIS的Comet解决方案,但也有一个完整的.NET客户端可用,它支持与厚客户端、windows服务等的集成。因此,它听起来应该非常符合要求。

此应用程序适用于行业中的一般内部网。使用套接字连接-即使用套接字需要打开一个端口进行访问-重新配置防火墙等。这是合理的安装先决条件还是工业客户通常会反对?HTTP连接是套接字。答案是(正确的)建议客户端发送GET,但服务器延迟发送回响应,直到数据准备好发送。是的,但HTTP连接在端口80上,而端口80没有被防火墙阻止?您所描述的内容听起来很完美-服务器延迟响应直到有数据-如何执行此操作?“是的,但HTTP连接位于端口80上,而端口80未被防火墙阻止?”如果端口80被阻止,则您没有工作的internet/intranet连接如果HTTP正常工作,请使用它配置为使用的任何端口。WCF?所以不仅仅是.NET2.0?可悲的是,.NET2.0是我工作的一个限制?WCF回调在这种情况下会有帮助吗?不,恐怕不会,恐怕只有WCF。我只是想提醒一下,如果有人知道有一个完整的实用程序类,您可以使用IHTTPassynchandler()和System.Threading.Monitor在.NET 2.0中轻松构建(某种)事件驱动的“服务器推送”,请为服务器必须保持一个套接字连接活动的每个客户端发布一些链接。因此,当无法提前预测客户数量时,它将不起作用。