C# 信号器GetHubContext不工作

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

我正在尝试使用GetHubContext从另一个项目连接到我的SignalR项目,但它就是不起作用。代码如下:

第一个项目

[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();它们可以在不同的项目中,但它们需要托管在同一应用程序域(同一进程)下。如果不是,您可以使用服务总线在应用程序之间进行通信。喜欢