0

SignalR 1.0.0-rc1 を使用する ASP.NET 4.5 Web アプリを用意しました。これを Azure Web サイトにプッシュして、簡単なテストを行いました (主にこのページに興味があります: http:/ /alantaappbeta.azurewebsites.net/api/v3.0/Tests/Sample.htm )。

問題は、ページが SignalR サービスと通信したくないように見えることです。http://alantaappbeta.azurewebsites.net/signalr/hubsが正しいクライアント側ハブ ファイルを返し、/signalr/negotiate への呼び出しが合理的な JSON を返すため、ハブとすべてが正しく登録されています。

{
  "Url":"/signalr",
  "ConnectionId":"a15023f9-c675-4fc2-9fd6-403a297f10c0",
  "KeepAlive":15.0,
  "DisconnectTimeout":40.0,
  "TryWebSockets":false,
  "WebSocketServerUrl":null,
  "ProtocolVersion":"1.1"
}

しかし、/signalr/ping を呼び出すと、"Protocol error: Unknown transport" というメッセージとともに 500 エラーが返されます。エラー ページで返されるスタック トレースは次のようになります。

[InvalidOperationException]: Protocol error: Unknown transport.
at Microsoft.AspNet.SignalR.PersistentConnection.ProcessRequestAsync(HostContext context)
at Microsoft.AspNet.SignalR.Hubs.HubDispatcher.ProcessRequestAsync(HostContext context)
at Microsoft.AspNet.SignalR.Owin.CallHandler.Invoke(IDictionary`2 environment)
at Microsoft.AspNet.SignalR.Owin.Handlers.HubDispatcherHandler.Invoke(IDictionary`2 environment)
at Microsoft.Owin.Host.SystemWeb.OwinCallContext.Execute()
at Microsoft.Owin.Host.SystemWeb.OwinHttpHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object extraData)
at Microsoft.Owin.Host.SystemWeb.OwinHttpHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData)
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

これは Azure 上にあるため、通常使用するすべてのトラブルシューティング ツールにアクセスすることはできませんが、アクセスできたログから上記以外の情報は得られません。

言うまでもなく、これは私のローカル IIS インスタンスで問題なく動作します :-)。

助言がありますか?

編集:これは、接続を開く方法です:

$.connection.hub.start({
    transport: 'auto',
    xdomain: true
}).done(function () {
    console.log('Connected with hub.id=' + $.connection.hub.id);
}).fail(function (e) {
    console.log('Unable to connect to SignalR Hubs: ' + e);
});

しかし.done()、ハンドラーも.fail()ハンドラーも呼び出されていません。

奇妙なことに、トランスポートを「longPolling」に設定すると、ローカル ボックスで IIS Express を使用して同様の方法でトランスポートを失敗させることができます。しかし、Azure でトランスポートを設定したことに違いはないようです: それでも同じエラーが発生します。

4

1 に答える 1

0

問題は、自分のマシンにさまざまなバージョンの SignalR が混在していたことであることが判明しました。NuGet パッケージ (1.0.0-rc1) のサーバー側 DLL を使用していましたが、JavaScript クライアント ファイルはdevブランチからのものでした。 . それらをすべて同期させると、すべてが機能しました。なぜこの問題が Azure でのみ発生したのかはまだ正確にはわかりませんが、IIS のさまざまなバージョンでサポートされている正確なトランスポートと関係があると思われます。

于 2012-12-29T01:54:32.183 に答える