我正在创建一个非常简单的聊天应用程序。它有一个ASP.NET网页作为前端,WCF服务作为后端,用于将消息存储到数据库。
除了一件事,一切都很好;当浏览器A输入聊天消息时,我希望浏览器B尽快看到消息(是的,我知道,这是聊天的目的)。
到目前为止,我所做的是在UpdatePanel中设置一个触发器,如下所示:
<Triggers>
<asp:AsyncPostBackTrigger ControlID="chatTimer" EventName="Tick" />
</Triggers>
使用计时器:
<asp:Timer ID="chatTimer" runat="server" OnTick="chatTimer_Tick" Interval="1000" />
这是最好的方法还是有更好,更简单的方法来完成消息的更新。此解决方案的一个缺点是,每次Tick事件运行时,用于输入聊天消息的文本框都会失去焦点。
对于有关更新消息的任何反馈或建议表示赞赏。
谢谢!
答案 0 :(得分:2)
由于HTTP协议不支持服务器推送,因此您必须轮询服务器以进行更改。有不同的方法,但它们都与你正在做的相似。
您可以通过设置UpdateMode="Conditional"
来更新您的更新面板,这样就不会在每个计时器时刻更新(并失去焦点)。只有在服务器端调用Update
方法才能触发它时,它才会更新。
答案 1 :(得分:2)
Comet是一种用于此类场景的技术。虽然我不会说这很简单。
基本上,客户端将保持对服务器开放的长期连接,然后服务器可以将数据推送到浏览器。
这个问题是相关的:Comet implementation for ASP.NET?
答案 2 :(得分:1)
如果您正在使用WCF,那么只要来自其他客户端的消息到达,服务器就会调用CallbackContract。