我已在 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吗?
谢谢。
您能提供有关错误的更多详细信息吗?
如果客户端没有发送初始握手消息,连接将被终止。
连接时发送以下消息
{"protocol":"json","version":1}
希望这有帮助!