【问题标题】:SignalR on Xamarin.iOS - randomly not able to call Hub methodXamarin.iOS 上的 SignalR - 随机无法调用 Hub 方法
【发布时间】:2013-11-24 16:51:37
【问题描述】:

我有一个简单的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 版上使用 Portable NuGet 包。

更新:

以下是我启用跟踪时得到的结果(我已将我的域设为空白):

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. 强制LongPollingTransport,无论如何
  2. 在成功的Start 和第一个Invoke 之间添加Task.Delay

我在服务器上将EnableDetailedErrors 设置为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

我认为这与客户放弃有关。我在 Azure 上看到了一些与此相关的 Github issues,但它们被标记为已关闭...

更新 #3

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

【问题讨论】:

  • 你使用的是哪个端口?
  • 只是默认值,80。不使用 https。
  • 使用 Connection.TraceWriter 启用信号器客户端跟踪,看看它是否为您提供更多信息
  • 在上面查看我的新编辑。
  • 您可以尝试this 查找问题原因...

标签: c# xamarin.ios signalr xamarin signalr-hub


【解决方案1】:

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

当我有时间时,我将创建一个 repro 并将其提交到 SignalR Github 问题页面。这周晚些时候应该可以做到。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-04
    • 2018-04-30
    • 2013-11-10
    • 1970-01-01
    • 1970-01-01
    • 2018-10-26
    • 2014-06-21
    • 2018-03-02
    相关资源
    最近更新 更多