信号机、Mono和Owin的自托管跨站点连接问题

信号机、Mono和Owin的自托管跨站点连接问题,mono,signalr,signalr-hub,owin,Mono,Signalr,Signalr Hub,Owin,我已经准备好为这个问题发愁了,因为所有的指南都给出了相同的一两个解决方案,这似乎对每个人都有效,除了我自己 我在Mono应用程序中使用SignalR,使用Owin。我已在配置中设置EnableCrossDomain=true。我已经使用javascript设置了一个简单的测试页面来连接。协商和pingURL加载时没有问题,并且似乎回复正确。但是,我在connect调用中遇到跨域错误 它肯定在使用我的EnableCrossDomain设置,因为如果我将其设置为false,协商将不起作用 下面是我要

我已经准备好为这个问题发愁了,因为所有的指南都给出了相同的一两个解决方案,这似乎对每个人都有效,除了我自己

我在Mono应用程序中使用SignalR,使用Owin。我已在配置中设置EnableCrossDomain=true。我已经使用javascript设置了一个简单的测试页面来连接。
协商
ping
URL加载时没有问题,并且似乎回复正确。但是,我在
connect
调用中遇到跨域错误

它肯定在使用我的EnableCrossDomain设置,因为如果我将其设置为false,
协商
将不起作用

下面是我要连接的Javascript(是的,我包含了返回相应Javascript的/signalr/hubs脚本):

我还尝试了
jQuery.support.cors=true也一样,但没有任何区别

我还尝试了像这样连接到常规PersistantConnection,但遇到了相同的问题,因此它似乎与集线器没有直接关系:

var connection = $.connection('/raw');
connection.url = 'http://localhost:7001/signalr';
connection.start()
    .done(function () { alert("Now connected!"); })
    .fail(function () { alert("Could not Connect!"); });
我做错了什么?为什么
ping
协商
起作用,但不
连接


编辑:同样为了让事情变得更奇怪,我添加了一些日志记录,并验证signar
CallHandler
类正在为所有请求(包括
connect
请求)添加
Access Control Allow Origin
头。所以它应该是有效的



编辑2:实际上,多亏了curl,服务器似乎返回了一个500响应代码,而且由于它没有包含头(这必须发生在我添加日志的代码块之后),Chrome抱怨跨站点,而实际上可能在服务器的某个地方抛出了异常。希望我能很快找到答案,并在这里发布答案。

所以事实证明,这与跨站点访问无关,而与Mono不兼容有关

在为signar()启用异常日志记录后,我得到了以下异常,而不仅仅是一个空白http 500错误:

System.InvalidOperationException: The connection id is in the incorrect format.
  at Microsoft.AspNet.SignalR.PersistentConnection.GetConnectionId (Microsoft.AspNet.SignalR.Hosting.HostContext context, System.String connectionToken) [0x00000] in <filename unknown>:0 
  at Microsoft.AspNet.SignalR.PersistentConnection.ProcessRequest (Microsoft.AspNet.SignalR.Hosting.HostContext context) [0x00000] in <filename unknown>:0 
  at Microsoft.AspNet.SignalR.Hubs.HubDispatcher.ProcessRequest (Microsoft.AspNet.SignalR.Hosting.HostContext context) [0x00000] in <filename unknown>:0 
  at Microsoft.AspNet.SignalR.Owin.CallHandler.Invoke (IDictionary`2 environment) [0x00000] in <filename unknown>:0 
  at Microsoft.AspNet.SignalR.Owin.Handlers.HubDispatcherHandler.Invoke (IDictionary`2 environment) [0x00000] in <filename unknown>:0 
  at Microsoft.AspNet.SignalR.Owin.Handlers.PersistentConnectionHandler.Invoke (IDictionary`2 environment) [0x00000] in <filename unknown>:0 
  at Microsoft.Owin.Diagnostics.ShowExceptionsMiddleware.Invoke (IDictionary`2 environment) [0x00000] in <filename unknown>

所以事实证明,这与跨站点访问无关,而与Mono不兼容有关

在为signar()启用异常日志记录后,我得到了以下异常,而不仅仅是一个空白http 500错误:

System.InvalidOperationException: The connection id is in the incorrect format.
  at Microsoft.AspNet.SignalR.PersistentConnection.GetConnectionId (Microsoft.AspNet.SignalR.Hosting.HostContext context, System.String connectionToken) [0x00000] in <filename unknown>:0 
  at Microsoft.AspNet.SignalR.PersistentConnection.ProcessRequest (Microsoft.AspNet.SignalR.Hosting.HostContext context) [0x00000] in <filename unknown>:0 
  at Microsoft.AspNet.SignalR.Hubs.HubDispatcher.ProcessRequest (Microsoft.AspNet.SignalR.Hosting.HostContext context) [0x00000] in <filename unknown>:0 
  at Microsoft.AspNet.SignalR.Owin.CallHandler.Invoke (IDictionary`2 environment) [0x00000] in <filename unknown>:0 
  at Microsoft.AspNet.SignalR.Owin.Handlers.HubDispatcherHandler.Invoke (IDictionary`2 environment) [0x00000] in <filename unknown>:0 
  at Microsoft.AspNet.SignalR.Owin.Handlers.PersistentConnectionHandler.Invoke (IDictionary`2 environment) [0x00000] in <filename unknown>:0 
  at Microsoft.Owin.Diagnostics.ShowExceptionsMiddleware.Invoke (IDictionary`2 environment) [0x00000] in <filename unknown>
resolver.InitializePerformanceCounters(instanceName, hostShutdownToken);