我有一個像這樣分層的應用程序:WPF - > WCF - > BLL - > DAL - > DB。 WCF層啓動SignalR主機。 BLL使用SignalR通知客戶。 WPF是接收SignalR通知的客戶端。我的問題是,它在我的筆記本電腦上工作,但是,當部署到分佈式環境(WPF在我的筆記本電腦上運行,WCF在另一臺服務器上運行)時,它的相同代碼不會導致WPF客戶端獲得SignalR通知。NET客戶端分佈式場景中的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"/>
請問您樞紐覆蓋的名字嗎?如果不是,SignalR喜歡重新命名集線器,例如「prestoHub」。 –
另外,您是否驗證過客戶端實際連接到服務器? –
@JoelLucsy它沒有。 PrestoHub類沒有任何屬性。它在本地工作。我認爲這可能是一個權限問題,因爲我的筆記本電腦與WCF服務器不在同一個域中。但我只是在猜測這一點。 –