gpt4 book ai didi

signalr - 为什么我的网页无法接收信号器消息

转载 作者:行者123 更新时间:2023-12-02 02:16:12 28 4
gpt4 key购买 nike

基本上我有 3 个应用程序。用于我的集线器的网络应用程序、Nservicebus 和信号器自托管服务器。我目前正在使用 signalr 版本 .4。基本上,Web 应用程序会在页面加载时启动与自托管服务器的连接。用户执行向服务总线发送命令的操作。服务总线然后连接到信号器服务器以通知所有 Web 客户端。

我的网页:

<script src="http://localhost:8081/test/signalr/hubs" type="text/javascript"></script>
<script>
jQuery.support.cors = true;
var myHub;

$.connection.hub.url = 'http://localhost:8081/test/signalr/hubs';

$(function () {
myHub = $.connection.userAccountHub;

myHub.ChangeNameUpdated = function (connId) {
alert("recieved signalr message");
};

$.connection.hub.start().done(function() {
var myClientId = $.connection.hub.id;
setCookie("srconnectionid", myClientId);
});
});

</script>

我的 SignalR 服务器:

      static void Main(string[] args)
{
Debug.Listeners.Add(new ConsoleTraceListener());
Debug.AutoFlush = true;

string url = "http://localhost:8081/test/";
var server = new Server(url);


server.EnableHubs();
server.Start();


Console.WriteLine("Server running on {0}", url);

while (true)
strong text{
ConsoleKeyInfo ki = Console.ReadKey(true);
if (ki.Key == ConsoleKey.X)
{
break;
}
}
}

我的 Signalr 服务器项目中的我的集线器

 public class UserAccountHub : Hub
{

public void UsersNameChanged(string passedThroughConnectionId)
{
Clients.ChangeNameUpdated(passedThroughConnectionId);
}
}

我的 nservicebus 调用

        //connect to signalRServer
var connection = new HubConnection("http://localhost:8081/test/signalr/hubs");
IHubProxy myHub = connection.CreateProxy("SignalRServer.Hubs.UserAccountHub");

//Credentials are inherited from the application
connection.Credentials = CredentialCache.DefaultNetworkCredentials;

var test = message.GetHeader("signalrConnectionId");


connection.Start().Wait();
myHub.Invoke("UsersNameChanged", message.GetHeader("signalrConnectionId")).ContinueWith(task =>
{
//for debuging purposes
if (task.IsFaulted)
{
Console.WriteLine(
"An error occurred during the method call {0}",
task.Exception.GetBaseException());
}
else
{
Console.WriteLine("Successfully called MethodOnServer");
}
});

我打开了 2 个浏览器。我在第二个浏览器上启动该过程,只有第一个浏览器收到通知。第二个浏览器没有。

当我运行 fiddler 时,我也没有看到任何突出的问题。

这个实现是否有更好的方法,还是我遗漏了什么?

最佳答案

好的!大卫的评论让我朝着正确的方向前进。还注意到这个更新了,之前没注意到。 Scroll to the bottom for the cross domain support

1.) 更新到版本 .5

2.) 将我在javascript中的连接信息修改为

$.connection.hub.url = 'http://localhost:8081/test/signalr';

$.connection.hub.start({ transport: 'longPolling', xdomain: true }).done(function () {
//alert("staring hub connection: " + $.connection.hub.id);
setCookie("srconnectionid", $.connection.hub.id);
});

3.) 我必须更改 HubConnection

var connection = new HubConnection("http://localhost:8081/test/");

4.) 我必须更改 IHubProxy

IHubProxy myHub = connection.CreateProxy("UserAccountHub");

关于signalr - 为什么我的网页无法接收信号器消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10435858/

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