无法连接到 Azure SignalR Hub
Could not connect to Azure SignalR Hub
我正在尝试 post 向 Azure SignalR Hub 发送实时消息。但是我无法连接到我的 Azure SignalR Hub 本身。我尝试了各种解决方案。它没有按预期工作。你能在这里帮助我吗?此版本的 SignalR 客户端没有文档。
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);
}
Remarks A HubConnection should be created using HubConnectionBuilder.
Before hub methods can be invoked the connection must be started using
StartAsync(CancellationToken). Clean up a connection using
StopAsync(CancellationToken) or 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
看起来,毕竟来自 Microsoft.AspNetCore.SignalR.Client 的 HubConnection 旨在连接到在中间件管理的 SignalR Hub,例如 Asp.Net Web App\ Api。它不打算连接到直接 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 服务表面上没有明确的文档来声明客户端库正在使用 REST API 版本的 SignalR。
希望能帮助到别人!
总结一下,
我是否应该始终实现像 Asp.Net Web 应用程序这样的中间件,并依靠它来创建和讨论 Hub?是否无法从 c# 控制台直接与 Azure SignalR 服务对话以创建集线器并通过集线器发送我的消息?
[OP]:不,不总是。除了我上面写的,还有另一种解决方案。这个 tutorial 帮助我通过 REST API.
直接与 Azure SignalR 服务对话
-更新-
使用任何服务器端语言为 Azure Signal Service 创建中央集线器(我选择,Asp.Net Web API) .这是让 Web API
这样的中间人在 post 到 Azure SignalR 服务之前授权客户端请求的最佳做法。此外,从客户端屏蔽 Azure SignalR 连接字符串。
通过 HubConnectionBuilder 库使用 JS、TS、.Net 控制台等任何客户端语言创建客户端应用程序(消息接收器,大部分时间) ,..
通过 Azure SignalR 连接字符串创建消息广播应用程序以通过 Azure SignalR 服务发送信号。
服务器可以post Hub 上的任何新信号事件,而客户端可以监听那些动态事件,前提是客户端订阅了这些动态事件。
当 Web API 实现该事件时,客户端只能通过 Web API Central Hub
post 发出信号。
我正在尝试 post 向 Azure SignalR Hub 发送实时消息。但是我无法连接到我的 Azure SignalR Hub 本身。我尝试了各种解决方案。它没有按预期工作。你能在这里帮助我吗?此版本的 SignalR 客户端没有文档。
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);
}
Remarks A HubConnection should be created using HubConnectionBuilder. Before hub methods can be invoked the connection must be started using StartAsync(CancellationToken). Clean up a connection using StopAsync(CancellationToken) or 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
看起来,毕竟来自 Microsoft.AspNetCore.SignalR.Client 的 HubConnection 旨在连接到在中间件管理的 SignalR Hub,例如 Asp.Net Web App\ Api。它不打算连接到直接 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 服务表面上没有明确的文档来声明客户端库正在使用 REST API 版本的 SignalR。
希望能帮助到别人!
总结一下,
我是否应该始终实现像 Asp.Net Web 应用程序这样的中间件,并依靠它来创建和讨论 Hub?是否无法从 c# 控制台直接与 Azure SignalR 服务对话以创建集线器并通过集线器发送我的消息?
[OP]:不,不总是。除了我上面写的,还有另一种解决方案。这个 tutorial 帮助我通过 REST API.
直接与 Azure SignalR 服务对话
-更新-
使用任何服务器端语言为 Azure Signal Service 创建中央集线器(我选择,Asp.Net Web API) .这是让
Web API
这样的中间人在 post 到 Azure SignalR 服务之前授权客户端请求的最佳做法。此外,从客户端屏蔽 Azure SignalR 连接字符串。通过 HubConnectionBuilder 库使用 JS、TS、.Net 控制台等任何客户端语言创建客户端应用程序(消息接收器,大部分时间) ,..
通过 Azure SignalR 连接字符串创建消息广播应用程序以通过 Azure SignalR 服务发送信号。
服务器可以post Hub 上的任何新信号事件,而客户端可以监听那些动态事件,前提是客户端订阅了这些动态事件。
当 Web API 实现该事件时,客户端只能通过
Web API Central Hub
post 发出信号。