可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
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/)