0

私は次のように階層化されたアプリを持っています: WPF -> WCF -> BLL -> DAL -> DB. WCF レイヤーは、SignalR ホストを開始します。BLL は SignalR を使用してクライアントに通知します。WPF は、SignalR 通知を受け取るクライアントです。

私の問題は、ラップトップで動作することですが、同じコードを分散環境 (ラップトップで WPF を実行し、別のサーバーで実行) にデプロイすると、WPF クライアントが SignalR 通知を受け取ることはありません。

2 つの質問があります。

  1. 私が間違っていることはありますか (以下のコードを参照)。構成ファイルでの使用が問題になる可能性があると思いlocalhostましたが、グーグルはそれについて何の光も当てていません。
  2. このような問題の典型的なトラブルシューティング手順は何ですか? どこから始めればよいかわかりません。

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"/>
4

1 に答える 1