Xamarin.iOS 上的 SignalR - 随机无法调用 Hub 方法

2024-01-07

我有一个简单的Hub在 Azure 中运行,我可以通过 Windows 中的控制台应用程序完美地工作。

我刚刚构建了一个简单的测试 Xamarin.iOS 应用程序,它给出了一些奇怪的行为。

  1. 随机在 LTE/Wifi 或模拟器/设备上 - 调用集线器方法失败并显示There was an error invoking Hub method X
  2. 随机大约 50% - 一切都运行得很好,就像 Windows 上的控制台应用程序一样 - 两者甚至可以互相发送消息

我在 iPhone 5S 和 iPhone 4S 设备上对此进行了测试。

关于为什么会发生这种情况有什么想法吗?我正在使用版本 2.0.0 上的便携式 NuGet 包。

UPDATE:

这是启用跟踪时得到的结果(我清空了我的域):

2013-11-25 07:47:48.204 MyApp[5163:80b] 13:47:48.1865420 - null - ChangeState(Disconnected, Connecting)
2013-11-25 07:47:49.025 MyApp[5163:6b03] 13:47:49.0247930 - d84a25b3-b426-4f0b-b4bc-7d170e3c1bd9 - SSE: GET http://mydomain.cloudapp.net/signalr/connect?transport=serverSentEvents&connectionToken=pVF6LN7KBOem7Ng2hrhx6dSByFe%2BxCr4u6RlY5V%2FtKf%2BHmOoJD5DfVpMySiUuDOaiIPlHI%2FtliqvuddvcDxnZQqi9tIYAxuyZOjYSG%2B9%2Fnx%2FQ%2B6m&connectionData=[{"Name":"MainHub"}]&noCache=c3d54c1d-ee78-49cc-85b4-2c87a024c32a
2013-11-25 07:47:49.203 MyApp[5163:6b03] 13:47:49.2023660 - d84a25b3-b426-4f0b-b4bc-7d170e3c1bd9 - SSE: OnMessage(Data: initialized)
2013-11-25 07:47:49.319 MyApp[5163:6b03] 13:47:49.3189120 - d84a25b3-b426-4f0b-b4bc-7d170e3c1bd9 - SSE: OnMessage(Data: {"C":"s-0,CF9","S":1,"M":[]})
2013-11-25 07:47:49.332 MyApp[5163:6b03] 13:47:49.3318670 - d84a25b3-b426-4f0b-b4bc-7d170e3c1bd9 - ChangeState(Connecting, Connected)
2013-11-25 07:47:49.634 MyApp[5163:6b03] 13:47:49.6339640 - d84a25b3-b426-4f0b-b4bc-7d170e3c1bd9 - SSE: OnMessage(Data: {"C":"s-0,CFA","G":"54eYUWzlKXr9ezIoP1rZvj4DOQ00lfpXZ62PV+HwgzqCvgET2otfFNud1KzX24MjGplzkOwpyzqrVJ1jffBMyWppsDt9Tl+D25btqsxJWt6bBg3v4YfwobBKbpZaScgk/gPp5w==","M":[]})
2013-11-25 07:47:49.703 MyApp[5163:6b03] 13:47:49.7029070 - d84a25b3-b426-4f0b-b4bc-7d170e3c1bd9 - SSE: OnMessage(Data: {"C":"s-0,CFB","M":[]})
2013-11-25 07:47:58.090 MyApp[5163:6b03] 13:47:58.0894910 - d84a25b3-b426-4f0b-b4bc-7d170e3c1bd9 - SSE: OnMessage(Data: {})
2013-11-25 07:48:08.108 MyApp[5163:6b03] 13:48:08.1084000 - d84a25b3-b426-4f0b-b4bc-7d170e3c1bd9 - SSE: OnMessage(Data: {})
2013-11-25 07:48:18.118 MyApp[5163:6b03] 13:48:18.1178390 - d84a25b3-b426-4f0b-b4bc-7d170e3c1bd9 - SSE: OnMessage(Data: {})
2013-11-25 07:48:22.097 MyApp[5163:6b03] 13:48:22.0968150 - d84a25b3-b426-4f0b-b4bc-7d170e3c1bd9 - OnMessage({"I":"0","E":"There was an error invoking Hub method 'MainHub.SignOn'."})

空的OnMessage,失败后将继续每隔一段时间打印一次。

更新#2

经过测试和进一步检查,它似乎比 LTE 与 Wifi 更有可能是随机的。回顾一下,在我的本地机器上运行一切正常。只是部署到 Azure 时并非如此。基本上,在随机发生的情况下,调用集线器方法将会超时。

以下是我所做的一些事情,这些事情使这个问题变得更加罕见,但它仍然会发生:

  1. Force LongPollingTransport,无论怎样
  2. Add a Task.Delay在成功之间Start和第一个Invoke

I set EnableDetailedErrors to true在服务器上,这似乎是服务器端发生的情况:

Error in SignOn: System.Threading.Tasks.TaskCanceledException: A task was canceled.
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at MyNamespace.MainHub.<SignOn>d__0.MoveNext(); TraceSource 'w3wp.exe' event

我认为这与客户放弃有关。我看到了一些Github 问题 https://github.com/SignalR/SignalR/issues/606Azure 上与此相关,但它们被标记为已关闭...

更新#3

一时兴起,我将其部署到标准 Azure 网站部分而不是云服务。之后一切正常。有什么想法吗?显然我可以使用 Azure 网站来实现此目的,但为什么它不能作为云服务工作呢?


目前,解决方案是使用 Azure 网站而不是云服务。

当我有时间时,我将创建一个重现并将其提交到 SignalR Github 问题页面。本周晚些时候应该能够做到这一点。

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

Xamarin.iOS 上的 SignalR - 随机无法调用 Hub 方法 的相关文章

  • 使用 gcc 在 Linux 上运行线程构建块 (Intel TBB)

    我正在尝试为线程构建块构建一些测试 不幸的是 我无法配置 tbb 库 链接器找不到库 tbb 我尝试在 bin 目录中运行脚本 但这没有帮助 我什至尝试将库文件移动到 usr local lib 但这又失败了 任何的意见都将会有帮助 确定您
  • STL 迭代器:前缀增量更快? [复制]

    这个问题在这里已经有答案了 可能的重复 C 中的预增量比后增量快 正确吗 如果是 为什么呢 https stackoverflow com questions 2020184 preincrement faster than postinc
  • C++11 删除重写方法

    Preface 这是一个关于最佳实践的问题 涉及 C 11 中引入的删除运算符的新含义 当应用于覆盖继承父类的虚拟方法的子类时 背景 根据标准 引用的第一个用例是明确禁止调用某些类型的函数 否则转换将是隐式的 例如最新版本第 8 4 3 节
  • 如何从 Visual Studio 将视图导航到其控制器?

    问题是解决方案资源管理器上有 29 个项目 而且项目同时具有 ASP NET MVC 和 ASP NET Web 表单结构 在MVC部分中 Controller文件夹中有大约100个子文件夹 每个文件夹至少有3 4个控制器 视图完全位于不同
  • 传递给函数时多维数组的指针类型是什么? [复制]

    这个问题在这里已经有答案了 我在大学课堂上学习了 C 语言和指针 除了多维数组和指针之间的相似性之外 我认为我已经很好地掌握了这个概念 我认为由于所有数组 甚至多维 都存储在连续内存中 因此您可以安全地将其转换为int 假设给定的数组是in
  • -webkit-box-shadow 与 QtWebKit 模糊?

    当时有什么方法可以实现 webkit box shadow 的工作模糊吗 看完这篇评论错误报告 https bugs webkit org show bug cgi id 23291 我认识到这仍然是一个问题 尽管错误报告被标记为RESOL
  • 无限循环与无限递归。两者都是未定义的吗?

    无副作用的无限循环是未定义的行为 看here https coliru stacked crooked com view id 24e0a58778f67cd4举个例子参考参数 https en cppreference com w cpp
  • 用于 FTP 的文件系统观察器

    我怎样才能实现FileSystemWatcherFTP 位置 在 C 中 这个想法是 每当 FTP 位置添加任何内容时 我都希望将其复制到我的本地计算机 任何想法都会有所帮助 这是我之前问题的后续使用 NET 进行选择性 FTP 下载 ht
  • 访问外部窗口句柄

    我当前正在处理的程序有问题 这是由于 vista Windows 7 中增强的安全性引起的 特别是 UIPI 它阻止完整性级别较低的窗口与较高完整性级别的窗口 对话 就我而言 我想告诉具有高完整性级别的窗口进入我们的应用程序 它在 XP 或
  • 在 Unity 中实现 Fur with Shells 技术

    我正在尝试在 Unity 中实现皮毛贝壳技术 http developer download nvidia com SDK 10 5 direct3d Source Fur doc FurShellsAndFins pdf Fins 技术被
  • 实例化类时重写虚拟方法

    我有一个带有一些虚函数的类 让我们假设这是其中之一 public class AClassWhatever protected virtual string DoAThingToAString string inputString retu
  • C# 动态/expando 对象的深度/嵌套/递归合并

    我需要在 C 中 合并 2 个动态对象 我在 stackexchange 上找到的所有内容仅涵盖非递归合并 但我正在寻找能够进行递归或深度合并的东西 非常类似于jQuery 的 extend obj1 obj2 http api jquer
  • 为什么使用小于 32 位的整数?

    我总是喜欢使用最小尺寸的变量 这样效果就很好 但是如果我使用短字节整数而不是整数 并且内存是 32 位字可寻址 这真的会给我带来好处吗 编译器是否会做一些事情来增强内存使用 对于局部变量 它可能没有多大意义 但是在具有数千甚至数百万项的结构
  • 如何实例化 ODataQueryOptions

    我有一个工作 简化 ODataController用下面的方法 public class MyTypeController ODataController HttpGet EnableQuery ODataRoute myTypes pub
  • 编译时展开 for 循环内的模板参数?

    维基百科 here http en wikipedia org wiki Template metaprogramming Compile time code optimization 给出了 for 循环的编译时展开 我想知道我们是否可以
  • 有没有办法让 doxygen 自动处理未记录的 C 代码?

    通常它会忽略未记录的 C 文件 但我想测试 Callgraph 功能 例如 您知道在不更改 C 文件的情况下解决此问题的方法吗 设置变量EXTRACT ALL YES在你的 Doxyfile 中
  • C# 中的 IPC 机制 - 用法和最佳实践

    不久前我在 Win32 代码中使用了 IPC 临界区 事件和信号量 NET环境下场景如何 是否有任何教程解释所有可用选项以及何时使用以及为什么 微软最近在IPC方面的东西是Windows 通信基础 http en wikipedia org
  • 对于某些 PDF 文件,LoadIFilter() 返回 -2147467259

    我正在尝试使用 Adob e IFilter 搜索 PDF 文件 我的代码是用 C 编写的 我使用 p invoke 来获取 IFilter 的实例 DllImport query dll SetLastError true CharSet
  • C++ 中的参考文献

    我偶尔会在 StackOverflow 上看到代码 询问一些涉及函数的重载歧义 例如 void foo int param 我的问题是 为什么会出现这种情况 或者更确切地说 你什么时候会有 对参考的参考 这与普通的旧参考有何不同 我从未在现
  • Mono 应用程序在非阻塞套接字发送时冻结

    我在 debian 9 上的 mono 下运行一个服务器应用程序 大约有 1000 2000 个客户端连接 并且应用程序经常冻结 CPU 使用率达到 100 我执行 kill QUIT pid 来获取线程堆栈转储 但它总是卡在这个位置

随机推荐