0 / 0 / 0
Регистрация: 27.03.2013
Сообщений: 54
|
||||||
1 | ||||||
Отправка сообщений клиенту14.08.2015, 01:18. Показов 4600. Ответов 5
Метки нет (Все метки)
Доброго времени суток, форумчане! Обычные прохожие и гуру wcf, подскажите пожалуйста нубу.
Обычная банальщина - wcf-чат. Суть вопроса заключается в том, что не могу понять, как обратиться к подключённым клинтам в классе службы. Привязка : netTcpBinding Клиенты работают с одним экземпляром класса службы. SessionMode.Required. Предыстория: есть класс службы. В нём метод :
В методе send мне нужно отправить всем подключённым клиентам (в массиве users), сообщение Messsge и, естественно, его автора Author. Так вот, скажите ПоЖаЛуЙсТа, как это сделать? Написать в коде? Синтаксис и всё такое. Как обратиться к этим клинтам подключённым? Как им что-то отослать и т.п.? P.s. заранее большое спасибо!
0
|
14.08.2015, 01:18 | |
Ответы с готовыми решениями:
5
WCF отправка сообщений Кривая отправка сообщений клиента серверу Отправка сообщений, файлов и т.д Отправка мгновенных текстовых сообщений |
14.08.2015, 04:47 | 2 |
Сообщение было отмечено dimoncraft как решение
Решение
И вам не хворать.
Суть вопроса вполне ясна. И так, по шагам, мое видение реализации. 1. Служба должна быть синглетная (свойство InstanceContextMode у атрибута ServiceBehavior - Single). 2. Должно присутствовать к-либо глобальное хранилище данных (в вашем случае - подключенных клиентов). 3. В реализации службы должны быть заданы методы Connect() и Disconnect(), для явного определения подключения - отключения. Для гарантии порядка их вызова следует воспользоваться демаркационными операциями (для атрибута OperationContract установить свойства IsInitiating и IsTerminatig), тем самым гарантируя, что метод Connect() всегда будет вызван первым (для создания канала сервер-клиент и занесения записи в хранилище о подключении пользователя), а метод Disconnect() всегда будет вызван последним (для удаления записи о пользователе из хранилища). Добавлено через 1 час 21 минуту dimoncraft, а если хорошо погуглить, то и решение уже есть (очень похожее на мое ) http://www.codeproject.com/Tip... lusinplusC
0
|
14.08.2015, 05:03 | 3 |
Вот, можете или использовать то что по ссылке, или то что у меня получилось Почти закончил писать, и решил погуглить, и как оказалось, решение уже есть.
Ну ничего, зато потренировался. Только не забудьте в файлах клиентов менять имена.
5
|
61 / 61 / 32
Регистрация: 30.07.2013
Сообщений: 178
|
|
11.09.2015, 10:05 | 4 |
insite2012, спасибо вам за примеры.
Если клиент, подключившись к серверу, аварийно завершается, то он остается в списках клиентов на сервере. Я хочу на сервере по таймеру вызывать метод и проверять список клиентов на то, что они подключены к серверу. Можете еще подсказать реализацию проверки подключённых клиентов со стороны сервера?
0
|
11.09.2015, 13:43 | 5 |
А зачем? Не проще ли в самом сервере определить метод, который будет вызываться при любом возникшем исключении на клиенте (клиентом, разумеется). А уже сервер при вызове этого метода получит из него контекст выполнения, и удалит из списка объектов обратного вызова тот, что относится именно к этому контексту.
0
|
61 / 61 / 32
Регистрация: 30.07.2013
Сообщений: 178
|
|
11.09.2015, 13:57 | 6 |
insite2012, данный метод у меня и так создан, но если на компьютере клиента вдруг сгорит что-то или свет выключится и т.д., кто тогда вызовет метод ? Поэтому я и хотел бы узнать способ проверять доступность клиентов со стороны сервера.
На данный момент у меня в Callback-e создан метод возвращающий bool. На клиенте данный метод просто возвращает true. Сервер по таймеру перебирает клиентов и вызывает данный метод. С помощью блока try - catch я отлавливаю ошибки и удаляю клиентов который их вызывают. Проблема в том, что на каждую такую ошибку почему-то уходит не меньше минуты ожидания=(((
0
|
11.09.2015, 13:57 | |
11.09.2015, 13:57 | |
Помогаю со студенческими работами здесь
6
Отправка сообщений другим окнам Отправка сообщений через SMTP Отправка и получение сообщений через сокеты WinAPI: отправка и прием сообщений окнам Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |