在Windows服务中创建SignalR Core并在本地C#应用程序中连接它

问题描述 投票:0回答:1

我已在 Windows 服务中成功创建 SignalR 连接。它工作正常,但是当我尝试使用 Microsoft.AspDotNet.SignalR.Client 通过其他 Windows 应用程序 (.NET 4.8) 连接到它时,它实际上不起作用。启动连接时总是卡住。

这是我使用的代码:

在 Windows 服务中:

var _ServiceSignalR = WebApp.Start<Startup>("http://localhost:8585");
var ServiceHubContext = GlobalHost.ConnectionManager.GetHubContext<ServiceHub>();

启动.cs:

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        app.UseCors(CorsOptions.AllowAll);
        app.MapSignalR(new HubConfiguration { EnableDetailedErrors = true});
    }
}

ServiceHub.cs:

[HubName("ServiceHub")]
public class ServiceHub : Hub
{
        public override Task OnConnected()
        {
            //Should reach here..
            return base.OnConnected();
        }
}

那是Windows服务部分。下一部分是客户端,注意客户端和 Windows 服务都是 .NET 4.8(不是 .NET Core)

客户端实现:

var serviceHubConnectionx = new HubConnectionBuilder()
    .WithUrl("http://localhost:8585/signalr")
    .Build();
await serviceHubConnectionx.StartAsync(); //It's getting stuck here forever!

我尝试使用 AspNet.SignalR.Client 并看到它成功了,因为我能够通过它创建集线器代理,并且它有效!但它使用的是AspNet.SignalR.Client而不是我需要的AspNetCore,因为它有更多有用的功能,例如在程序关闭后触发OnDisconnected,并且可以从客户端的触发方法返回值等等..

我与 AspNet.SignalR.Client 使用的代码:

var serviceHubConnection = new HubConnection("http://localhost:8585/signalr", useDefaultUrl: false);
var serviceHubProxy = serviceHubConnection.CreateHubProxy("ServiceHub");
await serviceHubConnection.Start(); //Works instantly.

那么在这种情况下我可以使用AspNetCore.SignalR.Client吗?

谢谢。

c# windows-services signalr-hub asp.net-core-signalr
1个回答
0
投票

您能提供有关错误的更多详细信息吗?

如果客户端没有发送初始握手消息,连接将被终止。

连接时发送以下消息

{"protocol":"json","version":1}

希望这有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.