Signalr 1.0.1跨域404错误

时间:2013-03-22 08:32:49

标签: asp.net-mvc asp.net-mvc-4 cross-domain signalr signalr-hub

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

这是来自它的代码:

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:远程服务器返回错误:(404)   未找到。在System.Net.HttpWebRequest.EndGetResponse(IAsyncResult   asyncResult)at   Microsoft.AspNet.SignalR.Client.Http.HttpHelper<> c__DisplayClass2.b__0(IAsyncResult的   一只老鼠   System.Threading.Tasks.TaskFactory 1.FromAsyncCoreLogic(IAsyncResult iar, Func 2 endFunction,Action 1 endAction, Task 1 promise,Boolean   requiresSynchronization)

我浏览了stackoverflow上的所有问题和答案,但找不到任何可以帮助我的问题。

我做错了什么?

*注意

使用jQuery我修改了hubs.js并更改了此代码:

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

并在我的通信视图中使用它,这在localhost和IIS上都可以正常工作。

也许问题在于这一行?

  

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

在原始/信号器/集线器中它是这样的:

  

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

我怎样才能从控制器那里做到这一点?

1 个答案:

答案 0 :(得分:2)

此代码不正确:

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

/ SignalR / Hubs指向Javascript代理。

/ signalr是连接端点,因此代码应为:

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

由于.NET客户端会自动附加默认/信号器URL。

有关此处文档的更多信息https://github.com/SignalR/SignalR/wiki/SignalR-Client-Hubs#hubconnection-api