2015-01-28 2 views
2

У меня есть клиентское приложение (настольное приложение C#), которое подключено к серверному приложению (приложение asp.net mvc) с помощью signalR, теперь я хочу, чтобы заказчик покупал один из моих продуктов с сайта, а продажа сообщалась в клиентское приложение. Но по соображениям безопасности я считаю, что это хороший способ ограничить вызов «мой репортерный метод signalR» только с серверной стороны! Но я не знаю, как я могу это сделать?Можно ли настроить метод signalR только для вызова с сервера?

+2

Где еще вы ожидаете, что это можно назвать с? Это не похоже на соединение с сервером, где он постоянно прослушивает входящие соединения. Клиент должен инициировать соединение с сервером. – mason

+0

вам нужно будет показать код, как вы звоните в концентратор, не будучи подключенным к клиенту. – DLeh

+0

@DLeh Я думаю, что это не важно, как я вызываю методы signalR из клиентского приложения. Когда продукт продается с моим сайтом, мне нужно сказать signalR проданный продукт, и signalR должен заявить администрации клиента, что продукт продается (в режиме реального времени). Если метод отчетности, вызванный с сайта, означает, что любой орган может его увидеть. – isaeid

ответ

0

То, что вы хотите сделать, это сигнал пользователей, что продукт был обновлен

Сначала получить контекст,

var context = GlobalHost.ConnectionManager.GetHubContext<ProductHub>() 

Затем вы можете обновить клиент по-разному, все клиенты

context.Clients.All.updateProduct(product); 

Конкретный клиент (идентификатор подключения)

context.Clients.Client(id).updateProduct(product) 

Идентификатор пользователя

context.Clients.User(userId).updateProduct(product) 

Убедитесь в абстрактном контексте концентратор с вашего домена логики, ее плохая практика, чтобы иметь высокое сцепление между ними.

Вы также можете использовать библиотеку, которая ее абстрагирует, я создал такую ​​библиотеку, и я думаю, что она подойдет вам в идеальном состоянии, вы используете любой тип агрегатора событий или автобуса сообщений, после чего вы вызываете свой автобус метод домена, такой как

eventAggregator.Publish(new ProductUpdated(product)); 

Моя библиотека будет загружать и доставлять обновления клиентам. Посмотрите здесь

http://andersmalmgren.com/2014/05/27/client-server-event-aggregation-with-signalr/

+0

Вопрос был, если можно ограничить, что методы могут быть вызваны только с сервера. Это не отвечает на это. – John

+0

Методы хаба предназначены для вызова через клиентов signalr. Нет смысла иметь метод хаба, который не может быть вызван от клиента. Но вам не нужно быть в контексте метода хаба, просто позвоните, GlobalHost.ConnectionManager.GetHubContext (). Поэтому мой ответ отвечает на вопрос. – Anders

+0

Дорогой @Anders, я думаю, вы имеете в виду, что я использую контекст signalR как статический объект и вызываю методы с контекстом. Мне не нравится использовать методы signalR для любых функций моего веб-приложения. Я думаю, что очень хорошо вызывать методы отчета signalR в делегатах (методы событий). – isaeid

Смежные вопросы