您好,我有两个 signalR 应用程序,我需要从 SignalR2 应用程序调用 SignalR app1 中的 Hub 方法或客户端方法,我正在使用 GlobalHost.ConnectionManager.GetHubContext用于访问显示 SignalR2 应用程序的 ChatHubIn:
public class ChatHub : Hub
{
public void SendToOtherApp(string name, string message, string Id)
{
var context = GlobalHost.ConnectionManager.GetHubContext("ChatHubIn");
context.Clients.All.addNewMessageToPage(name,message);
}
}
但我收到错误消息 ChatHubIn Hub 无法解析 这是什么?为什么要来??以任何方式解决此问题或从其他应用程序调用集线器方法或客户端的任何其他方式。 已编辑:
public class ChatHubIn : Hub
{
public void SendToSameApp(string name, string message, string Id) //, string c_id
{
Clients.All.addNewMessageToPage(name, message);
}
}
看到我有两个单独的应用程序 SignalR1 应用程序,SignalR2 应用程序 正如我所说,每个人都知道两个应用程序将有两个单独的客户端,这里的集线器部分我需要从 SignalR1 应用程序的集线器部分调用 SignalR2 应用程序中存在的 ChatHubIn Hub,然后我需要从那里向 SignalR2 应用程序中的所有客户端发送消息
最佳答案
我无法为您的问题提供准确的答案,因为简短的代码片段和解释所提供的信息不多,但我所做的是重现了我没有遇到任何问题的整个解决方案。
只是为了澄清这个问题:
see i have two separate applications SignalR1 app, SignalR2 app as i told and every body knows two apps willl have two separate client , hub parts here i need to call ChatHubIn Hub present in SignalR2 app from Hub part of SignalR1 app and from there i need to send messages to all clients in SignalR2 app
很难消化上面的内容,所以我所做的是创建两个项目;一个网络表单(SignalR1,本质上是服务器/主机)和一个 MVC(SignalR2 客户端)
这些都不是特别困难,我安装了完整的 signalR 堆栈的 webform 项目,我希望它成为这样的服务器。
在 MVC 项目中,我安装了 SignalR JS 客户端和 SignalR .Net 客户端,从而使我能够连接到主机。
最重要的是安装/启用需要在主机上安装的Cors: 安装包 Microsoft.AspNet.Cors - 版本 5.2.3
在启动类中允许cors:
public void Configuration(IAppBuilder app)
{
app.Map("/signalr", map =>
{
map.UseCors(CorsOptions.AllowAll);
var hubConfiguration = new HubConfiguration
{
EnableJSONP = true
};
map.RunSignalR(hubConfiguration);
});
}
不仅 MVC 项目可以接收消息,我现在还可以在 Hub 上触发一个方法
连接到主机:
<script src="~/Scripts/jquery-1.6.4.js"></script>
<script src="~/Scripts/jquery.signalR-2.2.0.js"></script>
<script src="http://localhost:45569/signalr/hubs"></script>
<script>
$(document).ready(function () {
var chatHub = $.connection.chatHub;
$.connection.hub.url = "http://localhost:45569/signalr";
// Declare a function on the chat hub so the server can invoke it
// Create a function that the hub can call to broadcast messages.
chatHub.client.broadcastMessage = function (name, message) {
// Html encode display name and message.
var encodedName = $('<div />').text(name).html();
var encodedMsg = $('<div />').text(message).html();
// Add the message to the page.
$('#discussion').append('<li><strong>' + encodedName
+ '</strong>: ' + encodedMsg + '</li>');
};
$.connection.hub.start(function () {
//We can also fire back :-) Happy days
});
});
</script>
我们也可以在 C# 中做到这一点!
var hubConnection = new HubConnection("http://localhost:45569/");
IHubProxy chatHubProxy = hubConnection.CreateHubProxy("chatHub");
hubConnection.Start().Wait();
chatHubProxy .Invoke("Send", "name", "message");
现在,如果我在 MVC 上安装完整的 SignalR 包,我可以调用我的集线器来调用另一个集线器:
public class OtherChatHub : Hub
{
public void Send(string name, string message)
{
var hubConnection = new HubConnection("http://localhost:45569/");
IHubProxy chatHubProxy = hubConnection.CreateHubProxy("chatHub");
hubConnection.Start().Wait();
chatHubProxy .Invoke("Send", "name", "message");
}
}
//编辑
由于所需的代码级别,让最小的 sln 工作对于这个问题来说太多了。所以我决定添加到 GitHub 供您下载和学习而不仅仅是使用确切的代码.
关于javascript - 如何从另一个 One Signalr app2 调用 One Signalr app1 中的集线器或客户端方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34853574/