1

私がしようとしているのは基本的なことです。しかし、何かが欠けているに違いありません。ローカルで実行されている MVC3 アプリ内でいくつかの SignalR Hub を定義します。同じソリューションには Windows Phone 8 と Windows ストア アプリがあり、どちらも SignalR ハブと通信してリアルタイム通信を行います。SignalR サーバーは最新のビットを使用し、クライアントは最新の .NET nuget を使用します。

クライアント側では、これは私が書き慣れているものです:

        IHubProxy SignalRChatHub;
        HubConnection chatConnection = new HubConnection("http://localhost:53478/");
        SignalRChatHub = chatConnection.CreateHubProxy("ChatHub");

        await chatConnection.Start();
        if (chatConnection.State == Microsoft.AspNet.SignalR.Client.ConnectionState.Connected)
        {
           // Stuff here.
        }

これは Windows 8 アプリ クライアントで問題なく動作し、IIS でローカルに実行されている SignalR ハブと簡単に接続できます。ただし、同じコードは Windows Phone クライアントでは機能しません。connection.start() は 404 例外で爆発します。

少し調べたところ、WP Emulator VM は別のマシンとして扱われ、ホスト マシンのネットワークを仮想的に使用しているようです。そのため、IIS が外部からの呼び出しをブロックし、Windows Phone 8 アプリから SignalR ハブへの到達を許可していない可能性があります。したがって、SignalR サーバー アプリの applicationhost.config を微調整して、外部の localhost からの接続を許可します。これで、SignalR ハブはローカルホストとローカル IP の両方から機能します。また、Global.asax.cs でクロスドメインの SignalR 接続を許可するようにルーティングが変更されました。

RouteTable.Routes.MapHubs(new HubConfiguration() { EnableCrossDomain = true });

Windows Phone クライアント コードは次のように変更されます。

HubConnection chatConnection = new HubConnection("http://<LocalIP>:53478/");

しかし、これは「リモートサーバーがエラーを返しました:見つかりません」という例外でconnection.start()に失敗し続けます。Fiddler が電話エミュレーターからネットワーク トラフィックを盗聴していて、connection.start() 呼び出しに応答してまったく何も表示されません。

私は何が欠けていますか?どんなポインタも役に立ちます..ありがとう!

4

1 に答える 1