C# 聊天-获取新消息的最佳方式
我正在使用AJAXWCF服务开发一个Asp.Net聊天。这是一个非常简单的聊天引擎,其中消息对话框意味着一对一(单个用户),但是我不知道如何(以最佳方式)管理新消息可用性的通知。 例如,假设以下场景: 每当我需要从一个用户向另一个用户发送新消息时,我都会编写如下javascript代码:C# 聊天-获取新消息的最佳方式,c#,javascript,asp.net,wcf,C#,Javascript,Asp.net,Wcf,我正在使用AJAXWCF服务开发一个Asp.Net聊天。这是一个非常简单的聊天引擎,其中消息对话框意味着一对一(单个用户),但是我不知道如何(以最佳方式)管理新消息可用性的通知。 例如,假设以下场景: 每当我需要从一个用户向另一个用户发送新消息时,我都会编写如下javascript代码: // btnSend client event handler MyWcfNamespace.MyWcfClass instance = new ..(); instance.CallMethod("messa
// btnSend client event handler
MyWcfNamespace.MyWcfClass instance = new ..();
instance.CallMethod("message string", callBackFunction, null);
这很简单。现在,从另一方(将接收我的消息的用户)来看,需要一些机制来知道何时发送了新消息。我想使用ajax定时器调用另一个wcf方法,如果有字符串消息,则返回字符串消息,如果没有,则返回空字符串,
但我认为这是实现这一目标的最好办法
如果存在通过javascript注册某些wcf事件的方法,那就太好了:
// javascript code:
MyWcfNamespace.MyWcfClass instance = new ..();
instance.OnNewMessageAvailable = myJavascriptCallBackFunction;
// And on CallBack function..
function myJavaScriptCallbackFunction(msg) {
alert('new message arraived:' + msg):
}
显然,我的wcf服务应该实现一些静态事件来管理我需要的所有通知
如有任何建议,将不胜感激。
谢谢。使用WCF,您可以通过使用长轮询等技术来实现这一点,但显然这并不容易。看看这个关于如何 有许多JS图书馆使这项工作对你来说很容易。是其中之一 看看这个关于如何 更新2 如果您使用的是Wcf 4.5,完成此任务的另一种方法是使用web套接字。聊天应用程序需要基于推的技术,而不是基于拉的技术。Wcf 4.5通过支持Web套接字为您提供这种能力 更新3 如果您决定使用长轮询,那么您就不必使用异步方法。长轮询将如下所示
这个例子也很有用。长轮询看起来像是一个wcf服务异步调用,但我不知道如何在客户端获取异步结果。此外,长轮询涉及到另一个用户应该在已建立的轮询中发送答案,但这可能是错误的,而这不是一个要求。同时我更喜欢避开外部图书馆,对我来说是一个获得新技能的好机会。还有别的办法吗?没有,我用的是WCF 4.0。好的,我将尝试轮询,但是如何通过javascript捕获异步结果呢?我已经更新了答案。使用JS,您的调用已经是异步的。您不必调用web服务的异步方法。