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 でトランスポートを設定したことに違いはないようです: それでも同じエラーが発生します。