SignalR Negotiate 404

匿名 (未验证) 提交于 2019-12-03 03:06:01

问题:

I am using SignalR 2.0. Everything works fine when running locally on my VS 2012. But when I publish the site on IIS, it breaks. The site loads but one of the scripts returns 404 Not Found. The script is something like.

https://example.com/signalr/negotiate?xxx

This path doesn't exist indeed. The correct path should be:

https://example.com/private/signalr/negotiate?xxx

Note the part in bold.

Inside the WebSite (https://example.com/) I have another Application (https://example.com/private/). This one is using SignalR.

This seems like a bug in SignalR since the signalr/hubs path is accessible from my private site.

回答1:

I had a similar problem. Here is the documentation for configuring the /signalr URL.

However, my solution differed from the docs. Instead of changing the standard app.MapSignalR(), I changed my client code to use /MyApp/signalr. Here is the code where "MyApp" is the virtual directory of my web application.

        var connection = $.hubConnection('/MyApp/signalr', {useDefaultPath: false});         var changesHub = connection.createHubProxy('changesHub');          changesHub.on('userCountChanged', function (count) {             $('#user-count').text(count);         });          connection.start().done(function () {             console.log('Hub has started');             changesHub.invoke('subscribeToChanges', user.id);         }); 

I tried the other way around (change the MapSignalR to the /signalr path) but this did not work and the negotiation was still routed to /MyApp/signalr/negotiate.



回答2:

I had the same issue when web site with signalr is not running as root site. Below solution worked for me. instead of using /signalr, use ../signalr. it will work with any site name folder. no hardcoded name 'MyApp' var connection = $.hubConnection('../signalr', {useDefaultPath: false});



回答3:

Had the same issue. web sites running as virtual directories of the root site. For some reason prefixing with ../ as in ../signalr didn't work, but ./signalr did.

My sample code:

function initSR() {     // logs signalr messages     $.connection.hub.logging = true;      // Declare a proxy to reference the hub.                  var chat = $.connection.myHub;     $.connection.hub.url = "./signalr";     $.connection.hub.start();     // Create a function that the hub can call to broadcast messages.     chat.client.broadcastMessage = function (message) {         // Process Message, take action upon receipt         alert(message);     }; } 


回答4:

Probably you added MapSignalR() in your Application (https://example.com/private/). If you want it on the root, then do the configuration on your WebSite (https://example.com/)



文章来源: SignalR Negotiate 404
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!