SignalR GetHubContext 不起作用

本文关键字:不起作用 GetHubContext SignalR | 更新日期: 2023-09-27 18:35:59

我正在尝试使用GetHubContext从另一个项目连接到My 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);       
    }

第二个项目:

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

    }
}

}

客户端的 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)
    });

客户端应通过与信号器项目位于不同类上的信号器中心从 class1 获取新数据。但是我没有获得任何新数据,客户端只连接到数据中心。是不是少了点什么?

SignalR GetHubContext 不起作用

你有一个控制台项目和一个托管 signalR 的 Web 项目,对吗?这两个将在完全不同的范围(单独的进程、单独的应用程序域)下运行。您只能从 Web 项目调用GetHubContext,但执行此操作的代码可以位于单独的项目 (Assemly) 中,但不能位于单独的进程/应用程序域中。

如果由于某种原因需要GetHubContext在单独进程中执行的代码,则需要使用某种集成,如服务总线、WCF 等