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

2024-01-14

我想实现一个网络聊天。

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

作为我使用的基础这篇博文 http://blogs.claritycon.com/blog/2011/04/12/roll-your-own-mvc-3-long-polling-chat-site/这样,异步操作就完成了。

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

[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<ChatMessage>> onMessages)
{
  if (onMessages == null)
    throw new ArgumentNullException("onMessages");

  Task task = Task.Factory.StartNew(state =>       
  {
    List<ChatMessage> msgs = new List<ChatMessage>();
    ManualResetEventSlim wait = new ManualResetEventSlim(false);
    Action<List<ChatMessage>> callback = state as Action<List<ChatMessage>>;
    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<ChatMessage>> onMessages, List<ChatMessage> messages)
{
  if (onMessages != null)
  {
    if (messages == null)
      messages = new List<ChatMessage>();
    try
    {
      onMessages(messages);
    }
    catch (Exception ex)
    {
      this.Logger.ErrorException("Failed to call OnMessages callback.", ex);
    }
  }
}

这与引用的博客文章中的想法相同

编辑2: 顺便说一句,当没有收到任何消息时,等待超时就会生效,响应就会返回。所以它似乎在某个地方崩溃了。知道如何记录这个吗?


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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

异步操作完成,但结果未发送到浏览器 的相关文章

  • boost::multi_index_container 复合键中的 equal_range 与比较运算符

    我正在尝试从多索引容器查询结果 其中值类型是三个元素的结构 第一个值已给出 但第二个和第三个值必须大于或小于查询参数 经过搜索后 我发现必须实现自定义密钥提取器 并且这里的一些链接建议相同 但我无法实现它 boost multi index
  • ROWNUM 的 OracleType 是什么

    我试图参数化所有现有的 sql 但以下代码给了我一个问题 command CommandText String Format SELECT FROM 0 WHERE ROWNUM lt maxRecords command CommandT
  • Signalr 在生产服务器中总是陷入长轮询

    当我在服务器中托管应用程序时 它会检查服务器端事件并始终回退到长轮询 服务器托管环境为Windows Server 2012 R1和IIS 7 5 无论如何 我们是否可以解决这个问题 https cloud githubuserconten
  • C++ 求二维数组每一行的最大值

    我已经设法用这个找到我的二维数组的每一行的最小值 void findLowest int A Cm int n int m int min A 0 0 for int i 0 i lt n i for int j 0 j lt m j if
  • Cygwin 下使用 CMake 编译库

    我一直在尝试使用 CMake 来编译 TinyXML 作为一种迷你项目 尝试学习 CMake 作为补充 我试图将其编译成动态库并自行安装 以便它可以工作 到目前为止 我已经设法编译和安装它 但它编译成 dll 和 dll a 让它工作的唯一
  • C# 中可空类型是什么?

    当我们必须使用nullable输入 C net 任何人都可以举例说明 可空类型 何时使用可空类型 https web archive org web http broadcast oreilly com 2010 11 understand
  • 将字符串从非托管代码传递到托管

    我在将字符串从非托管代码传递到托管代码时遇到问题 在我的非托管类中 非托管类 cpp 我有一个来自托管代码的函数指针 TESTCALLBACK FUNCTION testCbFunc TESTCALLBACK FUNCTION 接受一个字符
  • c 中的错误:声明隐藏了全局范围内的变量

    当我尝试编译以下代码时 我收到此错误消息 错误 声明隐藏了全局范围内的变量 无效迭代器 节点 根 我不明白我到底在哪里隐藏或隐藏了之前声明的全局变量 我怎样才能解决这个问题 typedef node typedef struct node
  • 为什么模板不能位于外部“C”块内?

    这是一个后续问题一个答案 https stackoverflow com questions 4866433 is it possible to typedef a pointer to extern c function type wit
  • 在 ASP.Net Core 2.0 中导出到 Excel

    我曾经使用下面的代码在 ASP NET MVC 中将数据导出到 Excel Response AppendHeader content disposition attachment filename ExportedHtml xls Res
  • 使用 LINQ 查找列表中特定类型的第一个元素

    使用 LINQ 和 C 在元素列表中查找特定类型的第一个项目的最短表示法是什么 var first yourCollection OfType
  • 我的 strlcpy 版本

    海湾合作委员会 4 4 4 c89 我的程序做了很多字符串处理 我不想使用 strncpy 因为它不会终止 我不能使用 strlcpy 因为它不可移植 只是几个问题 我怎样才能让我的函数正常运行 以确保它完全安全稳定 单元测试 这对于生产来
  • Windows 10 中 Qt 桌面应用程序的缩放不当

    我正在为 Windows 10 编写一个简单的 Qt Widgets Gui 应用程序 我使用的是 Qt 5 6 0 beta 版本 我遇到的问题是它根本无法缩放到我的 Surfacebook 的屏幕上 这有点难以判断 因为 SO 缩放了图
  • 像“1$”这样的位置参数如何与 printf() 一起使用?

    By man I find printf d width num and printf 2 1 d width num 是等价的 但在我看来 第二种风格应该与以下相同 printf d num width 然而通过测试似乎man是对的 为什
  • 将应用程序从 Microsoft Access 迁移到 VB 或 C#.NET

    我目前正试图说服管理层需要将我们的应用程序之一移植到 NET 该应用程序已经发展成为 Access 中的一个庞然大物 SQL 后端 拥有 700 个链接表 650 个表单 子表单 130 个模块和 850 个查询 我几乎知道这样做的所有主要
  • EPPlus Excel 更改单元格颜色

    我正在尝试将给定单元格的颜色设置为另一个单元格的颜色 该单元格已在模板中着色 但worksheet Cells row col Style Fill BackgroundColor似乎没有get财产 是否可以做到这一点 或者我是否必须在互联
  • 作为字符串的动态属性名称

    使用 DocumentDB 创建新文档时 我想设置属性名称动态地 目前我设置SomeProperty 像这样 await client CreateDocumentAsync dbs db colls x new SomeProperty
  • 如何使用 ReactiveList 以便在添加新项目时更新 UI

    我正在创建一个带有列表的 Xamarin Forms 应用程序 itemSource 是一个reactiveList 但是 向列表添加新项目不会更新 UI 这样做的正确方法是什么 列表定义 listView new ListView var
  • 如何在 C# 中播放在线资源中的 .mp3 文件?

    我的问题与此非常相似question https stackoverflow com questions 7556672 mp3 play from stream on c sharp 我有音乐网址 网址如http site com aud
  • 如何将字符串“07:35”(HH:MM) 转换为 TimeSpan

    我想知道是否有办法将 24 小时时间格式的字符串转换为 TimeSpan 现在我有一种 旧时尚风格 string stringTime 07 35 string values stringTime Split TimeSpan ts new

随机推荐

  • 从列表中删除项目有困难吗?

    我有两个清单 第一个是所有学生 第二个是选定的学生 我希望如果我一次选择某个学生 他们将从所有学生列表中删除 这是我的代码 但事实并非如此 学生不会被开除 foreach var li in ListSelectedStudents ToL
  • 将 json 数组读入 SQL Server 中的行

    给定下面的示例 json 数据 我如何编写一个查询来一步提取数组数据 我的目标是 ActionRecs 数组 4 中的每一项都占一行 我的实际 json 更复杂 但我认为这给出了我的目标的一个很好的例子 declare json2 nvar
  • 在 Pandas 数据帧上循环时跳过行

    我正在努力解决以下问题 并且似乎在网上找不到任何解决方案 我对数据框有一个 for 循环 该循环应该执行以下操作 如果 reversal 列的内容 1 则用 1 填充 action 列 跳过 125 行 用 1 填充 action 的下一个
  • 如何卸载 Visual Studio 2012 Update 2?

    我安装了 VS2012 然后更新到 VS2012 Update 2 因此我的 Visual Studio 版本为 11 0 60315 01 Update 2 但现在我想恢复到 11 0 50727 1 RTMREL 如何卸载更新 Visu
  • 将系统属性传递给spark-submit并从类路径或自定义路径读取文件

    我最近发现一种使用 logback 代替 log4j 的方法 https stackoverflow com a 45480145 1549135在 Apache Spark 中 既适合本地使用 也适合spark submit 然而 还缺少
  • HttpServlet 类中的“service”方法是什么?

    下面是为了学习而编写的一个简单的servlet package com example tutorial import java io IOException import java io PrintWriter import javax
  • Elasticsearch 中的嵌套查询

    我在使用 elasticsearch 进行嵌套查询时遇到问题 如果我删除其中一个查询字符串 它就可以工作 我试图解决的问题是我有一个包含闭包列表的文档 闭包 我想在闭包列表中搜索一个值 其中另一个值满足某个条件 这只是从 argan 1 的
  • OMP 线程私有对象未被破坏

    底线 如何确保 threadprivate 实例被正确销毁 背景 接听时这个问题 https stackoverflow com questions 32347008 confused about firstprivate and thre
  • 使用函数为输入添加值

    我不知道我创建的函数出了什么问题 我试图创建一个漂亮的国家 地区选择器 但看起来这个选择器不会选择任何内容 只是开玩笑 所以我的问题是根据我的想法 我的函数应该更改分类为的输入字段的值country input单击多个系列的链接时 但看起来
  • 使 Eclipse RCP Intro 成为透视图的一部分

    对于我们正在创建的产品 我们希望能够在透视图中显示欢迎屏幕 我们称之为 从这里开始 简介是该透视图中唯一需要的内容 但是 当我尝试将简介视图添加到透视图中时 它表示该视图已存在于布局中 我尝试过以编程方式关闭介绍 弄乱待机模式等 但我无法让
  • 如果 Laravel 的 Blade 模板检查文件是否存在

    我有一个简单的问题 如何检查 Laravel 的 Blade 模板中是否存在文件 我试过 if file exists covers 1 jpg ok endif 但这不起作用 covers目录位于 public 我还需要提供一个变量 ga
  • 无法在 Web 配置中使用 applicationInitialization 预热页面

    我有一个简单的 Umbraco 7 7 2 应用程序 并将其托管在 Azure 应用程序服务 上 当我重新启动服务器时 第一次请求页面需要 20 40 秒 这真的很烦人 特别是当负载很高并且您处于横向扩展以减少响应时间 我已经在 webco
  • 检查输入的数字是否是 jquery 中的数字

    我有一个简单的textbox用户在其中输入号码 jQuery 有吗isDigit如果用户输入数字以外的内容 该功能将允许我显示警报框 该字段也可以有小数点 我建议使用正则表达式 var intRegex d var floatRegex d
  • Silverlight 的替代 IDE

    我想在不购买 Visual Studio 2008 许可证的情况下使用 silverlight 我已经使用了 Visual Studio 的试用时间 因此我正在尝试寻找另一个解决方案 外面有什么东西吗 Thanks RC0 及更高版本支持
  • Hadoop MapReduce 容器以非零退出代码 1 退出

    我正在尝试运行一些 hadoop 程序来提取 Ubuntu 中一些摘要的关键字 当我使用 Hadoop 运行程序时 出现以下错误 WARN util NativeCodeLoader Unable to load native hadoop
  • 从 javascript 将焦点设置到 Silverlight 控件

    我在使用 Silverlight 时遇到焦点问题 如何使用 JavaScript 将焦点设置到 Silverlight 控件 将以下内容添加到您的 Silverlight 托管页面 位于 onSilverlightError 函数上方 fu
  • 在 Java 中处理法语字符

    我有一个页面 我在其中搜索一个术语 并且它显示得很完美 无论它是什么字符类型 现在 当我在 JSP 中有几个复选框时 我会检查它并提交 在这些复选框中 我有一个框名称 例如ABC Farmac utica Corporation 当我单击提
  • 从字符串生成用于加密的整数,反之亦然

    我正在尝试用 python3 编写 RSA 代码 我需要将用户输入字符串 包含任何字符 而不仅仅是数字 转换为整数 然后对其进行加密 在 Python 3 6 中 在没有第 3 方模块的情况下将字符串转换为整数的最佳方法是什么 如何将字符串
  • jQuery 中同时具有 mousedown/mouseup 和 dblclick

    每当 mousedown 或 mouseup 处理程序附加到元素时 dblclick 就无法附加 如果附加则不起作用 尽管这看起来很公平 是否有任何方法可以恢复 dblclick 功能而不从头开始重写它 叹息 或者我错过了一些关于事件传播的
  • 异步操作完成,但结果未发送到浏览器

    我想实现一个网络聊天 后端是双 WCF 通道 双通道工作在控制台或winform中 它实际上可以在网络上运行 我至少可以发送和接收消息 作为我使用的基础这篇博文 http blogs claritycon com blog 2011 04