28 / 28 / 6
Регистрация: 25.12.2008
Сообщений: 186
|
|||||||||||
1 | |||||||||||
Пример подписки на получение/изменение данных27.10.2016, 16:27. Показов 1379. Ответов 8
Метки нет (Все метки)
Здравствуйте, нужен пример дуплексного канала связи в таком ключе:
1 процесс запускает службу. Дальше ожидает что N клиентов отправят данные в службу, например строку, вызвав метод службы. Служба запишет эти данные во внутренний массив. А потом все полученные данные надо как то считать из процесса что запустил службу.
Собственно сложность в том что я не могу представить как реализовать получение данных от службы. в идеале я бы хотел на выходе нечто типа:
Может у кого то есть пример как такое можно организовать?
0
|
27.10.2016, 16:27 | |
Ответы с готовыми решениями:
8
Получение содержимого ListBox при подписки на событие dbClick нужно пример кода базы данных который храниться в тхт формате(удаление, изменение и т.д) Получение и изменение ip адреса Получение и изменение IP локальной сети |
27.10.2016, 16:45 | 2 |
А в чем именно у вас проблема? В создании службы? В вызове ее методов клиентами? Еще в чем-то?
И да, к чему тут дуплекс, если клиенты просто вызывают метод службы. Для чего он тут нужен?
0
|
28 / 28 / 6
Регистрация: 25.12.2008
Сообщений: 186
|
|
27.10.2016, 16:50 [ТС] | 3 |
Есть создание службы, есть вызов ее с клиентов, но вот нет идей как грамотно организовать получение данных от службы в создавший ее процесс. В идеале мне надо что бы служба автоматически при получении данных отправляла их в нужную ячейку массива в процессе который создал эту службу.
Не опрашивать же службу каждые 10ms в ожидании результата?
0
|
27.10.2016, 16:58 | 4 |
Хм. Вот одна.
Через поведение определите службу как синглет. В службе определите событие (или несколько, как вам нужно), со стандартным аргументом или своим собственным. Создайте экземпляр службы, подпишитесь на события, а потом передайте ее конструктору хоста (такое возможно только тогда, когда служба-синглет). Так пойдет?
0
|
28 / 28 / 6
Регистрация: 25.12.2008
Сообщений: 186
|
||||||
27.10.2016, 17:29 [ТС] | 5 | |||||
хм, а вот это крутая возможность, не знал что можно так доступ к службе получить.
Если я ее захостчу и во время работы буду менять данные они будут меняться или будет исключение? Но в идеале мне всё же надо это как то оформить в таком виде:
И даже если я подпишусь на событие(что само по себе очень крутая возможность) я не могу знать заранее куда записывать данные этого события. (я пишу службу с API для разработчиков) Можно конечно сделать обертку над службой и какой то локальный список для хранения входящих данных события, а пользователь когда вызывает эту функцию вызывает неявный бесконечный поиск по списку, но это звучит очень топорно.
0
|
27.10.2016, 17:38 | 6 |
Смотря какие данные и в каком потоковом режиме работает служба.
Этот идеал мне непонятен, к сожалению А зачем вам это знать? Определите тогда уж в процессе хоста события-дублеры, и вызывайте их по событию в службе. Можете свои аргументы событий предоставить и передавать через них информацию. Кому надо-подпишется на события хоста и получит все что нужно из службы.
0
|
28 / 28 / 6
Регистрация: 25.12.2008
Сообщений: 186
|
||||||
27.10.2016, 18:10 [ТС] | 7 | |||||
Ну, как сказать... У меня служба запускает другие службы к каждой из которых приписан поток который исполняет некоторый метод из исполнительного файла/длл. Заранее о методе известно только что у нее есть 1 аргумент в который передаю обьект класса с базовыми необходимыми данными. При этом я понятия не имею что будет в этом исполнительном файле, однако надо обеспечить обмен данных между тем кодом что там исполняется и остальными такими же потоками через приписанные к каждому потоку службу. При этом всё это действие по всей локальной сети распределено
0
|
28 / 28 / 6
Регистрация: 25.12.2008
Сообщений: 186
|
|
28.10.2016, 06:38 [ТС] | 9 |
Да решабельно, просто то что уже придумано мне не сильно нравится, можно что то элегантней придумать.
Вот идея с событиями мне нравится, но пока не могу продумать как это всё будет работать Добавлено через 11 часов 48 минут {"Не удалось выделить буфер управляемой памяти размером 33554432 байт. Возможно, не хватает доступной памяти."} У меня было 10 запущенных служб в них суммарно было ~4 матрицы 5000х5000. Интересно, на что не хватило памяти? xD
0
|
28.10.2016, 06:38 | |
28.10.2016, 06:38 | |
Помогаю со студенческими работами здесь
9
Получение и изменение атрибутов файла Получение или изменение SteamID Изменение/получение значения ProgressBar Получение и изменение аргументов командной строки Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |