我有一个像这样分层的应用程序:WPF -> WCF -> BLL -> DAL -> DB。WCF 层启动 SignalR 主机。BLL 使用 SignalR 通知客户端。WPF 是接收 SignalR 通知的客户端。
我的问题是它可以在我的笔记本电脑上运行,但是,当部署到分布式环境(WPF 在我的笔记本电脑上运行,WCF 在另一台服务器上运行)时,相同的代码不会导致 WPF 客户端收到 SignalR 通知。
我有两个问题:
- 有什么我做错了(见下面的代码)?我想也许
localhost
在配置文件中使用可能是一个问题,但谷歌搜索并没有对此有所了解。 - 此类问题的典型故障排除程序是什么?我不知道从哪里开始。
WCF 主机启动 SignalR:
private void StartSignalRHost()
{
var url = ConfigurationManager.AppSettings["signalrAddress"];
WebApplication.Start<Startup>(url);
}
BLL 调用 SignalR:
private static void OnDatabaseItemAdded(object sender, EventArgs<string> e)
{
var hubContext = GlobalHost.ConnectionManager.GetHubContext<PrestoHub>();
hubContext.Clients.All.OnDatabaseItemAdded("snuh");
}
WPF 客户端收到 SignalR 通知:
private void InitializeSignalR()
{
var signalrAddress = ConfigurationManager.AppSettings["signalrAddress"];
var hubConnection = new HubConnection(signalrAddress);
var prestoHubProxy = hubConnection.CreateHubProxy("PrestoHub");
prestoHubProxy.On<string>("OnDatabaseItemAdded", OnDatabaseItemAdded);
hubConnection.Start();
}
private void OnDatabaseItemAdded(string data)
{
Refresh();
}
配置文件中有这个:
注意:localhost
替换为 WPF 配置中的服务器名称。
<add key="signalrAddress" value="http://localhost:8084"/>