异步操作完成,但结果不会发送到浏览器

我想实现网络聊天。

后端是双WCF通道。 双通道可在控制台或winforms中运行,它实际上可在Web上运行。 我至少可以发送和接收消息。

作为基础,我使用了这篇博文 ,异步操作就完成了。

当我调试结果时,我看到消息都已准备好发送到浏览器。

[AsyncTimeout(ChatServer.MaxWaitSeconds * 1020)] // timeout is a bit longer than the internal wait public void IndexAsync() { ChatSession chatSession = this.GetChatSession(); if (chatSession != null) { this.AsyncManager.OutstandingOperations.Increment(); try { chatSession.CheckForMessagesAsync(msgs => { this.AsyncManager.Parameters["response"] = new ChatResponse { Messages = msgs }; this.AsyncManager.OutstandingOperations.Decrement(); }); } catch (Exception ex) { Logger.ErrorException("Failed to check for messages.", ex); } } } public ActionResult IndexCompleted(ChatResponse response) { try { if (response != null) { Logger.Debug("Async request completed. Number of messages: {0}", response.Messages.Count); } JsonResult retval = this.Json(response); Logger.Debug("Rendered response: {0}", retval.); return retval; } catch (Exception ex) { Logger.ErrorException("Failed rendering the response.", ex); return this.Json(null); } } 

但实际上没有发送任何内容

检查Fiddler,我看到了请求,但我从未收到回复。

 [SessionState(SessionStateBehavior.ReadOnly)] public class ChatController : AsyncController 

我还必须将SessionStateBehaviour设置为Readonly,否则异步操作将阻止整个页面。

编辑:这是CheckForMessagesAsync:

 public void CheckForMessagesAsync(Action<List> onMessages) { if (onMessages == null) throw new ArgumentNullException("onMessages"); Task task = Task.Factory.StartNew(state => { List msgs = new List(); ManualResetEventSlim wait = new ManualResetEventSlim(false); Action<List> callback = state as Action<List>; if (callback != null) { IDisposable subscriber = m_messages.Subscribe(chatMessage => { msgs.Add(chatMessage); wait.Set(); }); bool success; using (subscriber) { // Wait for the max seconds for a new msg success = wait.Wait(TimeSpan.FromSeconds(ChatServer.MaxWaitSeconds)); } if (success) this.SafeCallOnMessages(callback, msgs); else this.SafeCallOnMessages(callback, null); } }, onMessages); } private void SafeCallOnMessages(Action<List> onMessages, List messages) { if (onMessages != null) { if (messages == null) messages = new List(); try { onMessages(messages); } catch (Exception ex) { this.Logger.ErrorException("Failed to call OnMessages callback.", ex); } } } 

它与提到的博客文章中的想法相同

EDIT2:顺便说一下,当没有收到任何内容时,等待超时开始起作用,响应返回。 所以它似乎在某处崩溃。 任何想法如何记录这个?

我将jQUERY请求(请参阅原始博文)从POST更改为GET。 这解决了它。