SignalR在UWP中运行缓慢,在控制台应用程序中运行速度很快

时间:2017-06-20 15:22:46

标签: c# uwp signalr

我有一个SignalR服务器,它向连接到它的所有客户端发送某些消息。我在UWP中创建了两个示例客户端,另一个是C#中的简单控制台应用程序。我只需在从SignalR调用客户端方法后记录消息。

服务器发送后,控制台应用程序会立即记录数据,但UWP应用程序会在其中添加大约6-30秒的延迟。虽然它有时会频繁触发,但能够在10次中重现问题。

下面是UWP客户端的代码,类似于我在控制台应用程序中记录了消息。

async Task SetupSignalR()
    {

        var conn = new HubConnection(baseUrl);
        Writer.Text += (string.Format("Creating hub proxy with :{0}\n", baseUrl));
        var proxy = conn.CreateHubProxy("PumpStatusHub");


        Writer.Text += "Starting Connection\n";


        try
        {
            conn.Start().Wait();
            Writer.Text += "Connection started\n";
            proxy.Invoke("OpenPortReading").Wait();//, UserName, TextBoxMessage.Text);
            Writer.Text += "Port invoked\n";
            proxy.On<string>("ReadUdpData", OnMessage);
        }
        catch (HttpRequestException ex)
        {
            Writer.Text += "Unable to connect to server: Start server 
                            before connecting clients.\n";
            Writer.Text += ex.Message + "\n";
        }
        catch (Exception ex)
        {
            Writer.Text += ex.Message + "\n";
            Task.Delay(3000).Wait();
            SetupSignalR().Wait();
        }
    }

    private void OnMessage(string obj)
    {
        Windows.ApplicationModel.Core.CoreApplication.MainView.
            Dispatcher.RunAsync(CoreDispatcherPriority.High, (DispatchedHandler)(() =>
            {
                Writer.Text += string.Format("Message received: {0}\n"
                                            , counter++);
            }));
    }

任何帮助都将受到高度赞赏。 提前谢谢。

1 个答案:

答案 0 :(得分:1)

我通过与SignalR开发人员合作解决了这个问题,并发现一个有趣的事情,即使用Server发送事件作为传输时,他们正在修复的是用于UWP客户端的SignalR问题。

我通过使用长轮询传输解决了这个问题,因为Windows 7不支持WebSockets。