来自 Web 应用程序的 SignalR 中心上下文未调用客户端(控制台应用程序)方法
SignalR hub context from web app is not calling a client( console app) method
我正在尝试从不起作用的 SignalR HUB 上下文调用控制台应用程序方法-
var hubContext = GlobalHost.ConnectionManager.GetHubContext<Hubsfile.MyHub>();
hubContext.Clients.All.SendControl(machine, code);
这个(下面的另一个功能)工作正常,因为客户端就是网页本身(我认为)。
hubContext.Clients.All.registerCard(ip, data);
但是当我尝试调用来自不同客户端(控制台应用程序)的方法时,集线器上下文没有调用它。
Hub 上下文是否不适用于 Hub 应用程序之外的客户端。
编辑:
SignalR HUB 中的方法:
public void SendControlKeys(string machine, string code)
{
Clients.All.SendControl(machine, code);
}
控制台客户端中的方法:
proxy.On<string, string>("SendControl", (ip, data) =>
{
Console.WriteLine("server called SendControl");
Console.WriteLine();
byte[] dataBytes = HexEncoding.GetBytes(data, out int i);
try
{
lock (Clients)
{
if (Clients.Count > 0)
{
foreach (KeyValuePair<string, StateObject> client in Clients)
{
if (isClientConnected(client.Value.workSocket))
{
if (client.Key == ip)
{
Send(client.Value.workSocket, dataBytes);
break;
}
}
}
}
}
}catch(Exception ex)
{
Console.WriteLine(ex.Message);
}
});
在代理上设置回调后,您需要调用集线器连接的Start()
方法。
var proxy = con.CreateHubProxy("name");
proxy.On<T>(...);
con.Start().Wait();
然后,在回调中使用单个参数。将您拥有的 2 个参数包装成一个 class/object.
除此之外,请确保您的 CreateHubProxy 调用中的集线器名称有效,即您的 ASP.net 应用程序中的 SignalR 集线器名称(在您的情况下 MyHub
)。
我正在尝试从不起作用的 SignalR HUB 上下文调用控制台应用程序方法-
var hubContext = GlobalHost.ConnectionManager.GetHubContext<Hubsfile.MyHub>();
hubContext.Clients.All.SendControl(machine, code);
这个(下面的另一个功能)工作正常,因为客户端就是网页本身(我认为)。
hubContext.Clients.All.registerCard(ip, data);
但是当我尝试调用来自不同客户端(控制台应用程序)的方法时,集线器上下文没有调用它。
Hub 上下文是否不适用于 Hub 应用程序之外的客户端。
编辑:
SignalR HUB 中的方法:
public void SendControlKeys(string machine, string code)
{
Clients.All.SendControl(machine, code);
}
控制台客户端中的方法:
proxy.On<string, string>("SendControl", (ip, data) =>
{
Console.WriteLine("server called SendControl");
Console.WriteLine();
byte[] dataBytes = HexEncoding.GetBytes(data, out int i);
try
{
lock (Clients)
{
if (Clients.Count > 0)
{
foreach (KeyValuePair<string, StateObject> client in Clients)
{
if (isClientConnected(client.Value.workSocket))
{
if (client.Key == ip)
{
Send(client.Value.workSocket, dataBytes);
break;
}
}
}
}
}
}catch(Exception ex)
{
Console.WriteLine(ex.Message);
}
});
在代理上设置回调后,您需要调用集线器连接的Start()
方法。
var proxy = con.CreateHubProxy("name");
proxy.On<T>(...);
con.Start().Wait();
然后,在回调中使用单个参数。将您拥有的 2 个参数包装成一个 class/object.
除此之外,请确保您的 CreateHubProxy 调用中的集线器名称有效,即您的 ASP.net 应用程序中的 SignalR 集线器名称(在您的情况下 MyHub
)。