Signalr 1.0.1跨域404错误

问题描述:

我有Signalr跨域使用问题。我在一个解决方案中有三个不同的项目(应用程序),并使用signalr来启用它们之间的聊天功能。我有其他三个应用程序分开的聊天项目。Signalr 1.0.1跨域404错误

这是它的代码:

HUB

[HubName("ChatHub")] 
public class ChatHub : Hub 
{ 
    public void Send(PorukaViewModel message) 
    { 
     ..do some code 

     Clients.All.addMessage(
      ... // returns feedback to clients 
     ); 
    } 
} 

GlobalASAX

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

这是代码我的客户应用,

控制器

string chatUrl = System.Configuration.ConfigurationManager.AppSettings["ChatUrl"] + "/signalr/hubs"; 

var connection = new HubConnection(chatUrl, useDefaultUrl: false); 
IHubProxy myHub = connection.CreateHubProxy("ChatHub"); 

connection.Start().ContinueWith(task => 
{ 
    if (task.IsFaulted) 
    { 
    //... I log error and stop connection 
    connection.Stop(); 
    } 

    message = "some message"; 
    myHub.Invoke("Send", message).Wait(); 
    connection.Stop(); 
}); 

这所有的工作在我的本地很好,但是当我在IIS上部署我有connection.Start()此错误:

System.Net.WebException: The remote server returned an error: (404) Not Found. at System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult) at Microsoft.AspNet.SignalR.Client.Http.HttpHelper.<>c__DisplayClass2.b__0(IAsyncResult ar) at System.Threading.Tasks.TaskFactory 1.FromAsyncCoreLogic(IAsyncResult iar, Func 2 endFunction, Action 1 endAction, Task 1 promise, Boolean requiresSynchronization)

我浏览所有的问题与解答*,但找不到任何帮助我。

我在做什么错?

*注意

使用jQuery我修改hubs.js和改变了这种代码:

var signalrUrl = $("#chatUrl").val() + '/signalr'; 
... 
signalR.hub = $.hubConnection(signalrUrl, { useDefaultPath: false }); 

,并在我的通信次数使用,这是好的工作都在本地主机和IIS。

也许问题在这一行?

signalR.hub = $.hubConnection(signalrUrl, { useDefaultPath: false });

在原有/ signalr /集线器这样的:

signalR.hub = $.hubConnection("/signalr", { useDefaultPath: false });

我如何能做到这一点从控制器?

此代码是不正确:

string chatUrl = System.Configuration.ConfigurationManager.AppSettings["ChatUrl"] + "/signalr/hubs";

/SignalR /集线器指向一个JavaScript代理。

/signalr是连接端点所以代码应该是:

string chatUrl = System.Configuration.ConfigurationManager.AppSettings["ChatUrl"];

由于.NET客户端自动将默认/ signalr URL。

更多关于这里的文档https://github.com/SignalR/SignalR/wiki/SignalR-Client-Hubs#hubconnection-api