C# 信号器GetHubContext不工作
我正在尝试使用GetHubContext从另一个项目连接到我的SignalR项目,但它就是不起作用。代码如下: 第一个项目C# 信号器GetHubContext不工作,c#,websocket,signalr,signalr-hub,signalr.client,C#,Websocket,Signalr,Signalr Hub,Signalr.client,我正在尝试使用GetHubContext从另一个项目连接到我的SignalR项目,但它就是不起作用。代码如下: 第一个项目 [HubName("DataHub")] public class DataHub : Hub { int counter = 1; public void Hello(String message) { Clients.All.addMessage(message); } public void getNewDa
[HubName("DataHub")]
public class DataHub : Hub
{
int counter = 1;
public void Hello(String message)
{
Clients.All.addMessage(message);
}
public void getNewData(Dictionary<string,string> s)
{
Object result = new[] { s };
Clients.All.addnothing(result);
}
[HubName(“数据中心”)]
公共类数据集线器:集线器
{
int计数器=1;
公共void Hello(字符串消息)
{
Clients.All.addMessage(message);
}
public void getNewData(字典)
{
对象结果=新[]{s};
Clients.All.addnothing(结果);
}
第二个项目:
class Class1
{
static void Main(string[] args)
{
IHubContext hubContext = GlobalHost.ConnectionManager.GetHubContext<Tape.DataHub>();
while(true){
Dictionary<string, string> data = new Dictionary<string, string> { };
data.Add("User", "PD");
data.Add("DeviceId","445");
data.Add("ID", "1");
Object result = new[] { data };
hubContext.Clients.All.addData(data);
System.Threading.Thread.Sleep(5000);
}
}
}
Class1类
{
静态void Main(字符串[]参数)
{
IHubContext hubContext=GlobalHost.ConnectionManager.GetHubContext();
while(true){
字典数据=新字典{};
数据。添加(“用户”、“PD”);
数据。添加(“DeviceId”、“445”);
数据。添加(“ID”、“1”);
对象结果=新[]{data};
hubContext.Clients.All.addData(数据);
系统线程线程睡眠(5000);
}
}
}
}
客户端的Javascript代码
$.connection.hub.url = "http://localhost:57844/signalr";
var dataHub = $.connection.DataHub;
dataHub.client.addData = function (message) {
console.log(message);
var obj = message;
for (var i = 0; i < obj.length; i++)
//loops through the data and adds new data to the html page
}
$.connection.hub.start().done(function () {
console.log("connected");
}).fail(function (error) {
console.log('Invocation of start failed. Error: ' + error)
});
$.connection.hub.url=”http://localhost:57844/signalr";
var dataHub=$.connection.dataHub;
dataHub.client.addData=函数(消息){
控制台日志(消息);
var obj=消息;
对于(变量i=0;i
客户机应该通过与signalr项目不同的类上的signalr hub从class1获取新数据。但是我没有得到任何新数据,客户端只连接到DataHub。缺少什么了吗?您有一个控制台项目和一个承载signalR的web项目,对吗? 这两个将在完全不同的范围下运行(单独的进程,单独的应用程序域)。您只能从web项目中调用
GetHubContext
,但执行此操作的代码可以位于单独的项目(Assemly)中,但不能位于快速进程/应用程序域中
如果出于某种原因,您需要在单独的过程中执行
GetHubContext
的代码,那么您需要使用soem类集成,如servicebus、WCF等您是否从第二个项目自行托管?不,我不是自宿主,但正在执行GetHubContext的项目似乎是一个控制台应用程序?因此,您只能从承载signalr服务的同一Appdomain执行GetHubContext是的,它是一个控制台应用程序,但位于不同的项目上,而不是承载signalr的同一项目上。它能在不同的项目上吗?不过我确实引用了它。我引用了项目和类:GlobalHost.ConnectionManager.GetHubContext();它们可以在不同的项目中,但它们需要托管在同一应用程序域(同一进程)下。如果不是,您可以使用服务总线在应用程序之间进行通信。喜欢