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

时间:2013-11-24 16:51:37

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

我在Azure中运行了一个简单的Hub,我在Windows中的控制台应用程序中完美运行。

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

  1. 随机使用LTE / Wifi或模拟器/设备 - 使用There was an error invoking Hub method X
  2. 调用集线器方法失败
  3. 随机约50% - 一切都像Windows上的控制台应用程序一样完美 - 两者甚至互相发送消息
  4. 我在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时没有。基本上调用hub方法会在随机发生时超时。

    我做过的一些事情使问题更加罕见,但仍然会发生:

    1. 强制LongPollingTransport,无论
    2. 在成功Task.Delay和第一个Start之间添加Invoke
    3. 我在服务器上将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网站,但为什么它不能作为云服务工作?

1 个答案:

答案 0 :(得分:0)

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

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