2012-12-28 52 views
0

我有一个使用SignalR 1.0.0-rc1的ASP.NET 4.5 Web应用程序,我推送到Azure网站以进行一些快速而肮脏的测试(我主要对此页面感兴趣:http://alantaappbeta.azurewebsites.net/api/v3.0/Tests/Sample.htm)。Azure网站上的“ping”期间的SignalR 500错误

问题是页面似乎不想与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 /平,则返回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上设置传输方式似乎没有什么区别:我仍然得到相同的错误。

+0

你使用开发分支? – davidfowl

+0

不,只是NuGet的RC1包。 –

+1

ping端点不在RC1版本中。 – davidfowl

回答

0

事实证明,问题在于我在我的机器上混合使用了不同版本的SignalR:我使用的是NuGet包(1.0.0-rc1)中的服务器端DLL,但JavaScript客户机文件来自dev分支。一旦我把它们全部同步,一切都奏效了。我仍然不确定为什么这个问题仅出现在Azure中,但我怀疑它与由不同版本的IIS支持的精确传输有关。