我需要在.NET控制台和ASP.NET Core 2.0应用程序之间交换数据。第二个已经托管了SignalR服务器:
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");
});
从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();
}
}
但输出是:
断开。尝试连接......
断开。尝试连接......
,没有别的。我是SignalR的新手,我不知道如何调试这种行为。
答案 0 :(得分:8)
SignalR for.Net Core与Full .Net框架的SignalR的先前版本不兼容。
在完整框架中编写的SignalR客户端不能与Asp.Net核心中的集线器一起使用(反之亦然)。
以下是GitHub的确认
Will a SignalR Core server connect OK with 'traditional' Signalr 2 clients?