![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
LittleCat |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 23.4.2012 Репутация: нет Всего: нет |
Доброго дня. Подскажите плииз, может кто сталкивался с такой задачей. Пишу проект на Шарпе. В проекте представлены несколько сервисов системных рабочих и сервис, который является как бы фасадом для остальных, обеспечивая взаимодействие с клиентом Сильверлайта или любым другим. Рабочий сервис является клиентом OPC к указанному ему серверу OPC и одновременно архивирует данные в базу. Реализован как отдельный класс КлиентОПС( например). Рабочих сервисов несколько. Пока 3. Необходимо для взаимодействия с фасадным сервисом прикрутит к рабочему сервису реализацию WCF c контрактом pipeDuplex. Сделал библиотеку WCF - работает. Но как связать два объекта класса обьектКлиентОПС и обьектWCFбиблиотека в классе рабочего сервиса не могу придумать. Подписал WCF как IObserver к обьектКлиентОПС но это связь односторонняя. ОбьектWCFбиблиотека получает данные извне, которые обрабатываются в обьектКлиентОПС и тот должен начать генерировать данные для callback вызова в объекте обьектWCFбиблиотека на основе полученных данных. Писать один класс на все - повешусь.
Как обеспечить взаимодействие объектов разных классов, которые не должны знать о существовании друг-друга? Прошу прощения за возможно, детский вопрос, но я недавно начал работать Шарп. |
|||
|
||||
LittleCat |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 23.4.2012 Репутация: нет Всего: нет |
Может никто не делал а может я сумбурно описал ситуацию. Уточню тогда - как и куда копать, чтобы реализовать взаимодействие с сервисом WCF, реализованном в виде библиотеки в службе винды? Как передать ему параметры и как получить от него каике либо параметры не прибегая к реализации клиент-сервера. Я, например, хочу вернуть в лог сервиса ошибки WCF сервиса и передать ему какие либо параметры для возврата клиенту, который в данный момент подключен к WCF.
|
|||
|
||||
mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 7 Всего: 306 |
ну как бэ клиент- сервер кошерный подход в wcf. городить какой то свой маршаллинг не православно. тем не менее попробуй некий разделяемый ресурс. возможно это выход. |
|||
|
||||
LittleCat |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 23.4.2012 Репутация: нет Всего: нет |
Ну так и что - мне запускать сервис WCF из сервиса винды а потом и создавать клиента в сервисе винды для доступа к сервису WCF? К тому-же точка доступа net-pipe уже занята дуплексом для общения с внешним сервисом винды. Разделяяемый ресурс? ну так тут можно и через очередь сообщений подвязаться к службе. Может есть способ кошернее чем обвешивать WCF интерфейсами как араба динамитом? |
|||
|
||||
mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 7 Всего: 306 |
wcf является христианским продуктом под .net для распределенных приложений. оно понятно - порою несколько избыточно и тяжеловесно - зато гламурно. просто если менее монстроообразное - можно .NET Remoting, но это уже старье. я бы выбрал, то что проще и удобней, нежели костылеобразное и фееричное.
|
|||
|
||||
LittleCat |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 23.4.2012 Репутация: нет Всего: нет |
Гм. Дас трабл в том, что связь должен инициализироватьклиент Wcf в данном случае и поддерживать. Однажды отправив запрос в обьект при подключении клиента к нему мне нужен вариант, чтобы сам клиент генерировал данные и присылал а тут получается необходимо выполнят ьпостоянные запросы от клиента. Но как информировать клиента о смене протокола обмена или точнее сказать о необходимости смена набора данных от клиента к сервису.
|
|||
|
||||
erm0l0v |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 157 Регистрация: 11.1.2011 Репутация: 1 Всего: 1 |
Wcf есть возможность реализации callback тогда не только клиент будет обращаться в сервису но сервис сможет обратиться к клиенту. Вам ведь это нужно? И к тому же WCF это все лишь общий подход реализующий взаимодействие между некоторым клиентом и сервером, то есть что на клиенте что на сервере будет один общий интерфейс, а уже как будут передаваться данные между клиентом и сервером зависит только от вашей фантазии: по сети, через разделяемую память, да хоть по голубиной почте, нужно только найти Голубь SDK)))
|
|||
|
||||
LittleCat |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 23.4.2012 Репутация: нет Всего: нет |
Господа. Прошу прощения сразу за мою неосведомленность. Опыта мало еще в этом вопросе. Но мне не удается обьяснить точно что я хочу. Я знаю что есть колбэк и использую его. Описываю ситуацию.
Есть сервис винды. Написан мной. Работает как OPC( берет данные из определнного источника) клиент и складирует данные в базу. Сам работает прекрасно. Теперь есть необходимость отобразить эти данные "в режиме реального времени" на клиентах. Ок. для этого используем TCP и дуплекс( в данном конкретном используется дуплекс канальный, так как клиентом является другой сервис - фасад). Клиент выполняет запрос о том, какие данные ему нужны. Клиенту отображается лишь допустим 2 элемента массива данных, которые сервис архивирует в базу. Итак имеем - нужно отображать 2 элемента массива для клиента. Ок. Прислали от клиента параметр выбора. Сформировали ( должны сформировать ответ от сервиса и выкинуть через WCF обратно клиенту. ВОт тут и жопа. Напрямую передать от WCF к сервису винды данные и соответственно получит я не могу( не умею). А использовать канал связи клиент-сервер муторно. Учитывая что это только часть, а сервисов работает на машине уже 3 штуки.
собственно я так понимаю что после поднятия интерфейса в OnStart вы предлагаете связывать opcServer обьект с сервисом WCF дуплексом. вот и вопрос - есть ли способ проще. Ну или посоветуйте господа другую концепцию. Сижу уже 3 день - не могу придумать нифига и в нете не нашел пока. |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |