我有一个SignalR服务器,它将某些消息发送到连接到它的所有客户端。我创建了两个示例客户端,一个在 UWP 中,另一个是 C# 中的简单控制台应用程序。我只是在从 SignalR 调用客户端的方法后记录一条消息。
引人注目的是,控制台应用程序会在服务器发送后立即记录数据,但 UWP 应用程序在其中增加了大约 6-30 秒的延迟。尽管它有时会频繁触发,但它能够重现问题中的 10 次中的 6 次。
下面是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 Connectionn";
try
{
conn.Start().Wait();
Writer.Text += "Connection startedn";
proxy.Invoke("OpenPortReading").Wait();//, UserName, TextBoxMessage.Text);
Writer.Text += "Port invokedn";
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++);
}));
}
任何帮助将不胜感激。提前谢谢。
我通过与 SignalR 开发人员合作修复了此问题,并发现了一件有趣的事情,即在使用服务器发送的事件作为传输时,他们正在修复的 UWP 客户端的 SignalR 存在问题。
我通过使用长轮询传输解决了这个问题,因为 Windows 7 不支持 WebSockets。