|
Какие средства в wcf можно использовать...
|
|||
---|---|---|---|
#18+
для реализации такой простой идеи: Есть несколько клиентов и сервер. 1) Клиент передает сообщение серверу 2) Сервер рассылает это сообщение "подписчикам" Сервер представил как InstanceContextMode.Single, автохост для управления через форму. Первый этап я реализовал оч просто (банальный tcp-биндинг). Сообщения принимаю. Теперь нужно средство "вещания" или типо того, чтобы сервер отправил данные всем клиентам из списка. Сам список, вероятно, формируется так: при запуске клиента он отправляет запрос на сервер "запиши меня в список и если что, отошли сообщение". Все компьютеры внутри локальной сети. Но а саму отправку от сервака клиенту как реализовать? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2017, 11:16 |
|
Какие средства в wcf можно использовать...
|
|||
---|---|---|---|
#18+
sanekoffice, Ну если говорить конкретно о WCF, то самый очевидный вариант использовать callback или, иначе, duplex services Другое дело, что это работает не для всех протоколов это работает. Если будете использовать стандартные биндинги, то проверьте по таблице поддерживается ли Duplex режим. довольно много требуется всякого инфраструктурного кода, например, обработки ошибок, что какой-то клиент "отвалился". этот механизм специально не ориентировали на массовую рассылку, поэтому многие вещи (например, асинхронную рассылку) нужно делать самому. его достаточно сложно отлаживать (по сравнению с прямым запросом WCF) Поэтому, если нет специальной привязки именно к WCF, я бы поискал другие варианты. Например SignalR Очередь сообщений, с поддержкой нескольких подписчиков Service Bus for Windows Server , RabbitMQ , ... ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2017, 10:57 |
|
Какие средства в wcf можно использовать...
|
|||
---|---|---|---|
#18+
МихаилР, Немного не понял каким образом мне вызывать callback на стороне всех клиентов. В данном виде он отправляет ответ тому клиенту, от которого пришел запрос. Как же мне отправить остальным? Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
P.S. на счет альтернатив спасибо, почитаю. Но мне любопытно реализовать именно в wcf. Хочу как следует ознакомиться с ее возможностями ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2017, 09:05 |
|
Какие средства в wcf можно использовать...
|
|||
---|---|---|---|
#18+
sanekofficeМихаилР, Немного не понял каким образом мне вызывать callback на стороне всех клиентов. Если очень приближенно, то схема выглядит так: 1. У вас есть Callback контракт, с помощью которого, вы будете отсылать уведомления на клиентов Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
2. Для того, чтобы клиенты могли подписываться/отписываться от нотификаций вы делаете специальный сервис. Вот его контракт: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9.
3. Внутри этого сервиса вы просто ведете учет всех подписавшихся и отписавшихся клиентов: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
4. Теперь, когда у вас есть список клиентов, которые желают получить уведомления, вы можете каждому из них отправить сообщение: Код: c# 1. 2. 3.
Как-то так. Понятно, что это ни разу не продакшен код. Как минимум здесь нужно: - Это не многопоточное решение (я про список callbacks) - нужно заменить на нормальный вариант - Для избавления от дубликатов callbacks здесь используется простой хэш-код класса. На сколько я помню, это не очень хороший вариант (какой хороший, правда тоже не помню - по-моему, обычно советуют присылать с клиенте некий уникальный код клиента) - Рассылка уведомлений идет в один поток и не асинхронными методами (т.е. последний в списке получит уведомление не пойми когда, а если там еще будут ошибки, ...) - Нет обработки ошибок отсылки (например, клиент отпал) - как результат, если в середине списка что-то упадет, то хвост списка свое уведомление не получит вообще никогда Но сама идея вроде понятна. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2017, 11:02 |
|
|
start [/forum/topic.php?fid=19&fpage=3&tid=1396712]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
93ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
others: | 302ms |
total: | 483ms |
0 / 0 |