C# .NET客户端分布式场景中的信号器故障排除
我有一个像这样分层的应用程序:WPF->WCF->BLL->DAL->DB。WCF层启动信令器主机。BLL使用信号器通知客户端。WPF是接收信号器通知的客户端 我的问题是,它在我的笔记本电脑上工作,但是,当部署到分布式环境(WPF在我的笔记本电脑上运行,WCF在另一台服务器上运行)时,相同的代码不会导致WPF客户端获得信号器通知 我有两个问题:C# .NET客户端分布式场景中的信号器故障排除,c#,signalr,C#,Signalr,我有一个像这样分层的应用程序:WPF->WCF->BLL->DAL->DB。WCF层启动信令器主机。BLL使用信号器通知客户端。WPF是接收信号器通知的客户端 我的问题是,它在我的笔记本电脑上工作,但是,当部署到分布式环境(WPF在我的笔记本电脑上运行,WCF在另一台服务器上运行)时,相同的代码不会导致WPF客户端获得信号器通知 我有两个问题: 是否有我做得不正确的地方(见下面的代码)?我认为在配置文件中使用localhost可能是一个问题,但谷歌没有对此做出任何解释 对于这种情况,典型的故障排
localhost
可能是一个问题,但谷歌没有对此做出任何解释 private void StartSignalRHost()
{
var url = ConfigurationManager.AppSettings["signalrAddress"];
WebApplication.Start<Startup>(url);
}
private static void OnDatabaseItemAdded(object sender, EventArgs<string> e)
{
var hubContext = GlobalHost.ConnectionManager.GetHubContext<PrestoHub>();
hubContext.Clients.All.OnDatabaseItemAdded("snuh");
}
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
我必须改变这一点:
<add key="signalrAddress" value="http://localhost:8084"/>
您的中心是否覆盖该名称?如果没有,signar喜欢重命名hub,例如“prestoHub”。此外,您是否验证了客户端是否确实连接到服务器?@JoelLucsy它没有。PrestoHub类上没有属性。而且它在本地工作。我认为这可能是一个权限问题,因为我的笔记本电脑与WCF服务器位于不同的域中。但我只是在猜测这一点。我如何验证客户端是否正在连接?当我在client.hubConnection.Start().Wait()上单步执行代码时,没有发生异常;
<add key="signalrAddress" value="http://localhost:8084"/>
<add key="signalrAddress" value="http://servername:8084"/>
http://127.0.0.1
http://110.120.130.140
http://myserver