#c# #azure #signalr #signalr-hub
#c# #azure #signalr #signalr-концентратор
Вопрос:
Я могу подключиться к службе Azure SignalR из Asp.Net Веб-приложение, использующее свой ключ доступа. Asp.Net Веб-приложение создает и размещает концентратор поверх службы Azure SignalR. Я создал консольный клиент c # и подключился к Asp.Net Концентратор SignalR веб-приложения, использующий Microsoft.AspNetCore.SignalR.Client
библиотеку.
Вопросы:
-
Должен ли я всегда внедрять промежуточное программное обеспечение, подобное Asp.Net Веб-приложение и полагаться на него для создания концентратора и обмена данными через него? Да, основываясь на Samara и других источниках, у нас есть несколько вариантов.
- Используйте REST API из консольного приложения для размещения концентратора (Azure SignalR) в качестве сервера и обслуживания клиентов подписчиков в качестве портала. Это поддерживает однонаправленный обмен сообщениями.
- Используйте REST API из функций Azure (сделайте его бессерверным) для размещения концентратора (Azure SignalR) в качестве сервера и обслуживания клиентов подписчиков в качестве портала. Это поддерживает однонаправленный обмен сообщениями.
- Разместите концентратор (Azure SignalR) из Asp.Net управляемый веб-API с помощью auth() layer и обслуживание клиентов через API. Это полностью поддерживает двунаправленный обмен сообщениями.
-
Невозможно напрямую связаться со службой Azure SignalR из консоли c #, чтобы создать концентратор и отправлять мои сообщения через концентратор?
- Используйте REST API из консольного приложения для размещения концентратора (Azure SignalR) в качестве сервера и обслуживания клиентов подписчиков в качестве портала. Это поддерживает однонаправленный обмен сообщениями.
- Используйте REST API из функций Azure (сделайте его бессерверным) для размещения концентратора (Azure SignalR) в качестве сервера и обслуживания клиентов подписчиков в качестве портала. Это поддерживает однонаправленный обмен сообщениями.
Я новичок в службе Azure SignalR; пожалуйста, помогите мне с вышеуказанными вопросами. На мои вопросы почти даны ответы. Надеюсь, это поможет!
P.S. У людей нет реальных ответов, держитесь подальше
Комментарии:
1. Вы можете использовать любой тип проекта, который вы хотите, для достижения своей цели. SignalR — это просто система для реализации подключений к websocket, которая обычно выполняется совместно с веб-службами, но это не является обязательным требованием.
2. Итак, в консольном клиенте я нашел образец проекта github под названием «Бессерверный». Он взаимодействует со службой Azure SignalR, чтобы создать концентратор, транслирующий сообщения для отдельного пользователя всем пользователям. Но отдельный пользователь не смог отправлять сообщения в Hub. Как сделать так, чтобы два приложения для синхронизации данных были похожи на чат.
3. @SamaraSoucy-MSFT, интеграция службы Azure SignalR с Asp.Net Приложения и консольный клиент, похоже, сильно отличаются друг от друга. Интеграция с SignalR не является бесшовной.
4. @SamaraSoucy-MSFT, заранее благодарю за вашу помощь!
Ответ №1:
Я думаю, что немного лучше понимаю ваш вопрос. Я думаю, вы говорите о приведенном здесь примере кода? https://github.com/aspnet/AzureSignalR-samples/tree/master/samples/Serverless
Если вы хотите создать приложение для чата, вам следует изменить код, чтобы объединить две функции. Я смог сделать это, обновив program.cs для запуска обоих наборов кода. Это не полноценный клиент чата — во всех сообщениях по-прежнему говорится, что они приходят от другого пользователя, но я надеюсь, это даст вам лучшее представление о том, как это работает.
app.Command("client", cmd =>
{
cmd.Description = "Start a client to listen to the service";
cmd.HelpOption("--help");
var userId = cmd.Argument("<userId>", "Set User ID");
cmd.OnExecute(async () =>
{
var connectionString = connectionStringOption.Value() ?? configuration["Azure:SignalR:ConnectionString"];
if (string.IsNullOrEmpty(connectionString) || !hubOption.HasValue())
{
MissOptions();
return 0;
}
var client = new ClientHandler(connectionString, hubOption.Value(), userId.Value);
await client.StartAsync();
//Add the server to the client so we can talk both ways
var server = new ServerHandler(connectionString, hubOption.Value());
await server.Start();
Console.ReadLine();
await client.DisposeAsync();
return 0;
});
});
Следует кое-что иметь в виду, и почему большинство из этих примеров добавляют слой API поверх службы SignalR. Для того, чтобы создать соединение со службой, вы используете ключ. Если вы встроите это в свое консольное приложение, а затем удалите его, любой пользователь с приложением теперь сможет управлять всеми вашими концентраторами, извлекая ключ. Если вы не доверяете эту возможность всем своим пользователям, то лучше добавить уровень API — пользователь проходит аутентификацию в API, и API решает, какие разрешения у них есть на концентраторе.
Комментарии:
1. SamaraSoucy-MSFT, оказывается, что, подобно SQL Server или другим внутренним серверам, мы должны создать промежуточное программное обеспечение для обмена сообщениями через Azure SignalR Service Hub.
2. SamaraSoucy-MSFT, если мы не создаем приложение для чата или портативные приложения, мы прекрасно используем службу Azure SignalR с помощью консольного приложения.
3. Да, SamaraSoucy-MSFT. Вчера я проверил этот образец. Бессерверный образец был однонаправленным. Только сервер может транслировать сообщения подписчикам. Подписчики не могут отправлять сообщения обратно на сервер, если это необходимо в крайних случаях.
4. Я искал причины. Похоже, что REST API службы Azure SignalR не позволяет отдельным пользователям или подписчикам отправлять обратные сообщения на серверный концентратор.
5. Я забыл поблагодарить вас за усилия! Завтра я попробую выполнить упражнение и поделюсь результатами.