C# .NET控制台信号器客户端与.NET核心信号器服务器
我需要在.NET控制台和ASP.NET核心2.0应用程序之间交换数据。第二个服务器已经托管了一个信号服务器:C# .NET控制台信号器客户端与.NET核心信号器服务器,c#,asp.net-core,signalr,C#,Asp.net Core,Signalr,我需要在.NET控制台和ASP.NET核心2.0应用程序之间交换数据。第二个服务器已经托管了一个信号服务器: public class MyHub : Hub { public override async Task OnConnectedAsync() { await Clients.All.InvokeAsync("Send", $"{Context.ConnectionId} connected"); }
public class MyHub : Hub
{
public override async Task OnConnectedAsync()
{
await Clients.All.InvokeAsync("Send", $"{Context.ConnectionId} connected");
}
public Task Send(string message)
{
return Clients.All.InvokeAsync("Send", $"{Context.ConnectionId}: {message}");
}
}
app.UseSignalR(routes =>
{
routes.MapHub<MyHub>("hubs");
});
公共类MyHub:Hub
{
公共覆盖异步任务OnConnectedAsync()
{
wait Clients.All.InvokeAsync(“Send“,$”{Context.ConnectionId}connected”);
}
公共任务发送(字符串消息)
{
返回Clients.All.InvokeAsync(“Send”,$“{Context.ConnectionId}:{message}”);
}
}
app.usesigner(路由=>
{
路线。MapHub(“枢纽”);
});
我可以从html页面调用函数。因此它起作用了。
现在,我在解决方案中添加了一个.NET 4.6控制台应用程序:
public static HubConnection _connection;
static void Main(string[] args)
{
_connection = new HubConnection("http://localhost:51278/hubs");
var myHub = _connection.CreateHubProxy("MyHub");
_connection.Closed += OnDisconnected;
OnDisconnected();
myHub.Invoke<string>("Send", "Hello World ").ContinueWith(task => {
if (task.IsFaulted)
{
Console.WriteLine("There was an error calling send: {0}", task.Exception.GetBaseException());
}
else
{
Console.WriteLine(task.Result);
}
});
_connection.Stop();
}
static void OnDisconnected()
{
Console.WriteLine("Disconnected. Try to connect...");
var t = _connection.Start(new LongPollingTransport());
bool result = false;
t.ContinueWith(task =>
{
if (!task.IsFaulted)
{
result = true;
Console.WriteLine("Connected");
}
}).Wait();
if (!result)
{
OnDisconnected();
}
}
公共静态HUB连接\u连接;
静态void Main(字符串[]参数)
{
_连接=新的轮毂连接(“http://localhost:51278/hubs");
var myHub=_connection.CreateHubProxy(“myHub”);
_连接。关闭+=断开连接;
OnDisconnected();
myHub.Invoke(“发送”、“你好世界”).ContinueWith(任务=>{
if(task.IsFaulted)
{
WriteLine(“调用send:{0}”、task.Exception.GetBaseException()时出错);
}
其他的
{
Console.WriteLine(task.Result);
}
});
_连接。停止();
}
静态空洞不连通()
{
Console.WriteLine(“断开连接。尝试连接…”);
var t=_connection.Start(新的LongPollingTransport());
布尔结果=假;
t、 继续(任务=>
{
如果(!task.IsFaulted)
{
结果=真;
控制台。写入线(“连接”);
}
}).Wait();
如果(!结果)
{
OnDisconnected();
}
}
但结果是:
断开连接。尝试连接
断开连接。尝试连接
没有别的了。我不熟悉SignalR,不知道如何进一步调试这种行为。SignalR for.Net Core与SignalR for完整.Net framework的早期版本不兼容 在完整框架中编写的SignalR客户端不能与Asp.Net核心中的集线器一起使用(反之亦然) 这是GitHub的确认