【问题标题】:Signalr 1.0.1 Cross domain 404 errorSignalr 1.0.1 跨域 404 错误
【发布时间】:2016-03-22 22:21:31
【问题描述】:

我对 Signalr 跨域使用有疑问。我在一个解决方案中有三个不同的项目(应用程序),并使用信号器在它们之间启用聊天功能。我有独立于其他三个应用程序的聊天项目。

这是其中的代码:

集线器

[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) 在 Microsoft.AspNet.SignalR.Client.Http.HttpHelper.c__DisplayClass2.b__0(IAsyncResult 一只老鼠 System.Threading.Tasks.TaskFactory1.FromAsyncCoreLogic(IAsyncResult iar, Func2 endFunction, Action1 endAction, Task1 promise, Boolean 需要同步)

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

我做错了什么?

*注意

使用 jQuery,我修改了 hubs.js 并更改了以下代码:

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

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

也许这行有问题?

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

在原来的 /signalr/hubs 中是这样的:

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

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

【问题讨论】:

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


    【解决方案1】:

    此代码不正确:

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

    /SignalR/Hubs 指向一个 Javascript 代理。

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

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

    因为 .NET 客户端会自动附加默认的 /signalr URL。

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

    【讨论】:

      猜你喜欢
      • 2013-03-06
      • 2016-03-01
      • 2021-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-17
      • 1970-01-01
      • 2013-06-24
      相关资源
      最近更新 更多