我正在尝试将实时消息发布到Azure SignalR Hub。但是我无法连接到我的Azure SignalR Hub本身。我尝试了各种解决方案。它没有按预期工作。你能在这里帮助我吗?此版本的SignalR Client没有文档。
public static async Task BroadcastMessageAsync()
{
var signalrUrl = "https://myazuresignalr.service.signalr.net";
var hubConnection = new HubConnection(signalrUrl);
hubConnection.Credentials = CredentialCache.DefaultNetworkCredentials;
hubConnection.Closed += async () =>
{
await hubConnection.Start();
};
var hubProxy = hubConnection.CreateHubProxy("chat");
hubProxy.On<string, string>("ReceiveMessage", (user, message) =>
{
Console.WriteLine(user + " | " + message);
});
try
{
await hubConnection.Start();
Console.WriteLine("Connection started");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
await hubProxy.Invoke("SendMessage", "user", "message").ConfigureAwait(false);
}
答案 0 :(得分:1)
备注应使用HubConnectionBuilder创建HubConnection。 在调用集线器方法之前,必须使用以下命令启动连接 StartAsync(CancellationToken)。使用清理连接 StopAsync(CancellationToken)或DisposeAsync()。
样本
HubConnection _connection = new HubConnectionBuilder()
.WithUrl(url, option =>
{
option.AccessTokenProvider = () =>
{
return Task.FromResult(//// Access Token ///);
};
}).Build();
看看这些样本
https://github.com/aspnet/AzureSignalR-samples/tree/master/samples
答案 1 :(得分:1)
毕竟,看起来像来自Microsoft.AspNetCore.SignalR.Client的HubConnection旨在连接到在诸如Asp.Net Web App \ Api之类的中间件上管理的SignalR Hub。它不打算连接到直接的Azure SignalR服务终结点。
错误:
var signalrUrl = "https://myazuresignalr.service.signalr.net";
更正:对于聊天客户端
var signalrUrl = "https://myazuresignalr.service.signalr.net/client/?hub=yourHubName";
正确:适用于聊天服务器
var signalrUrl = "https://myazuresignalr.service.signalr.net/api/v1/hubs/yourHubName
现在,我能够使用其访问键从Asp.Net Web应用程序连接到Azure SignalR服务。 Asp.Net Web App通过Azure SignalR服务创建并托管一个中心。通过c#控制台应用程序,我正在连接到Asp.Net应用程序以与Azure SignalR服务进行通话。
Azure SignalR服务表面上没有清晰的文档来声明客户端库正在使用SignalR的REST API版本。
希望它可以帮助和帮助别人!
总结
我是否应该始终实现像Asp.Net Web应用程序这样的中间件,并依靠它来创建和通过Hub进行对话?是否无法从c#控制台直接与Azure SignalR服务交谈以创建集线器并通过集线器发送我的消息?
[OP]:不,并非总是如此。除了我上面写的内容以外,还有另一种解决方案。 tutorial可以帮助我直接通过REST API与Azure SignalR服务进行对话。
-更新-
使用任何服务器端语言(我选择的Asp.Net Web API )创建Azure Signal Service的中央枢纽。最好的做法是让像Web API
这样的中间人在发布到Azure SignalR服务之前授权客户端请求。此外,还要从客户端屏蔽Azure SignalR连接字符串。
使用任何客户端语言(包括JS,TS,.Net控制台等),通过HubConnectionBuilder库创建客户端应用程序(大多数情况下为消息接收器)。
通过Azure SignalR连接字符串创建消息广播应用程序,以通过Azure SignalR服务发送信号。
服务器可以通过集线器发布任何新的信号事件,而客户端可以侦听那些动态事件,前提是客户端已订阅这些动态事件。
当Web API实现该事件时,客户端也只能通过Web API Central Hub
发布信号。