gpt4 book ai didi

asp.net-mvc - Signalr 1.0.1 跨域 404 错误

转载 作者:行者123 更新时间:2023-12-04 05:05:24 25 4
gpt4 key购买 nike

我对 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 });
}

这是来自我的客户应用程序的代码,

Controller
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.TaskFactory1.FromAsyncCoreLogic(IAsyncResult
iar, Func
2 endFunction, Action1 endAction, Task1 promise, Boolean requiresSynchronization)



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

我做错了什么?

*注意

使用 jQuery 我修改了 hubs.js 并更改了此代码:
var signalrUrl = $("#chatUrl").val() + '/signalr';
...
signalR.hub = $.hubConnection(signalrUrl, { useDefaultPath: false });

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

也许问题出在这条线上?

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



在原始/signalr/hubs 中,它是这样的:

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



我怎么能从 Controller 做到这一点?

最佳答案

此代码不正确:

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

关于asp.net-mvc - Signalr 1.0.1 跨域 404 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15565887/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com