在WP8中使用SignalR时遇到困难
本文关键字:遇到 SignalR WP8 | 更新日期: 2023-09-27 18:30:47
我有一个Windows Phone 8客户端。
我正在使用 SignalR 与我的服务器通信。
我需要我的 UI 使用来自服务器的消息进行更新。
我知道服务器部分是正确的,因为我设置了断点并使用了 HTML5 客户端。
问题出在WP8上
我以前从未使用过WP8,所以我不确定我是否正确。
我有这个:
public MainPage()
{
this.InitializeComponent();
this.NavigationCacheMode = NavigationCacheMode.Required;
connection.Start().ContinueWith(task =>
{
if (task.IsFaulted)
{
UpdateConnectionState("Not Connected");
}
else
{
UpdateConnectionState(string.Format("Success! Connected with client connection id {0}", connection.ConnectionId));
hubuserid = connection.ConnectionId;
//not important for now LogIn();
}
});
connection.Received += data =>
{
UpdateConnectionState(data);
};
connection.Error += ex =>
{
UpdateConnectionState(string.Format("An error occurred {0}", ex.Message));
};
connection.Closed += () =>
{
UpdateConnectionState(string.Format("Connection with client id {0} closed", connection.ConnectionId));
};
connection.Reconnected += () =>
{
UpdateConnectionState("The connection was re-established");
};
}
我的 UI 最初声明已建立连接。
它现在正在接收我卡住的服务器的消息。 我也试过这个:
private async void UpdateTime(string data)
{
await dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
{
txtInfo.Text = data;
});
}
public MainPage()
{
this.InitializeComponent();
this.NavigationCacheMode = NavigationCacheMode.Required;
proxy.On<string>("internetUpTime", UpdateTime);
connection.Start().ContinueWith(task =>
{
if (task.IsFaulted)
{
UpdateConnectionState("Not Connected");
}
else
{
UpdateConnectionState(string.Format("Success! Connected with client connection id {0}", connection.ConnectionId));
hubuserid = connection.ConnectionId;
}
});
//connection.Received += data =>
//{
// UpdateConnectionState(data);
//};
connection.Error += ex =>
{
UpdateConnectionState(string.Format("An error occurred {0}", ex.Message));
};
connection.Closed += () =>
{
UpdateConnectionState(string.Format("Connection with client id {0} closed", connection.ConnectionId));
};
connection.Reconnected += () =>
{
UpdateConnectionState("The connection was re-established");
};
}
哪种方式是正确的,我的代码有什么问题?
谢谢
若要处理来自服务器的调用,请使用以下语法:
proxy.On<PckType>("broadcastMessage", msg => {});
其中PckType
是等效于使用以下代码发送的类型服务器的类型:
Clients.Caller.broadcastMessage(pck);
SignalR 充当 RPC 服务,这意味着从客户端调用的方法必须存在于服务器上,反之亦然。当然,这仅适用于Hub
方法。