| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > Совет по реализации взаимодествия |
| Автор: LittleCat 2.8.2012, 12:59 |
| Доброго дня. Подскажите плииз, может кто сталкивался с такой задачей. Пишу проект на Шарпе. В проекте представлены несколько сервисов системных рабочих и сервис, который является как бы фасадом для остальных, обеспечивая взаимодействие с клиентом Сильверлайта или любым другим. Рабочий сервис является клиентом OPC к указанному ему серверу OPC и одновременно архивирует данные в базу. Реализован как отдельный класс КлиентОПС( например). Рабочих сервисов несколько. Пока 3. Необходимо для взаимодействия с фасадным сервисом прикрутит к рабочему сервису реализацию WCF c контрактом pipeDuplex. Сделал библиотеку WCF - работает. Но как связать два объекта класса обьектКлиентОПС и обьектWCFбиблиотека в классе рабочего сервиса не могу придумать. Подписал WCF как IObserver к обьектКлиентОПС но это связь односторонняя. ОбьектWCFбиблиотека получает данные извне, которые обрабатываются в обьектКлиентОПС и тот должен начать генерировать данные для callback вызова в объекте обьектWCFбиблиотека на основе полученных данных. Писать один класс на все - повешусь. Как обеспечить взаимодействие объектов разных классов, которые не должны знать о существовании друг-друга? Прошу прощения за возможно, детский вопрос, но я недавно начал работать Шарп. |
| Автор: LittleCat 5.8.2012, 22:49 |
| Может никто не делал а может я сумбурно описал ситуацию. Уточню тогда - как и куда копать, чтобы реализовать взаимодействие с сервисом WCF, реализованном в виде библиотеки в службе винды? Как передать ему параметры и как получить от него каике либо параметры не прибегая к реализации клиент-сервера. Я, например, хочу вернуть в лог сервиса ошибки WCF сервиса и передать ему какие либо параметры для возврата клиенту, который в данный момент подключен к WCF. |
| Автор: LittleCat 6.8.2012, 15:58 | ||
Ну так и что - мне запускать сервис WCF из сервиса винды а потом и создавать клиента в сервисе винды для доступа к сервису WCF? К тому-же точка доступа net-pipe уже занята дуплексом для общения с внешним сервисом винды. Разделяяемый ресурс? ну так тут можно и через очередь сообщений подвязаться к службе. Может есть способ кошернее чем обвешивать WCF интерфейсами как араба динамитом? |
| Автор: mrbrooks 6.8.2012, 16:09 |
| wcf является христианским продуктом под .net для распределенных приложений. оно понятно - порою несколько избыточно и тяжеловесно - зато гламурно. просто если менее монстроообразное - можно .NET Remoting, но это уже старье. я бы выбрал, то что проще и удобней, нежели костылеобразное и фееричное. |
| Автор: LittleCat 8.8.2012, 15:17 |
| Гм. Дас трабл в том, что связь должен инициализироватьклиент Wcf в данном случае и поддерживать. Однажды отправив запрос в обьект при подключении клиента к нему мне нужен вариант, чтобы сам клиент генерировал данные и присылал а тут получается необходимо выполнят ьпостоянные запросы от клиента. Но как информировать клиента о смене протокола обмена или точнее сказать о необходимости смена набора данных от клиента к сервису. |
| Автор: erm0l0v 9.8.2012, 10:23 |
| Wcf есть возможность реализации callback тогда не только клиент будет обращаться в сервису но сервис сможет обратиться к клиенту. Вам ведь это нужно? И к тому же WCF это все лишь общий подход реализующий взаимодействие между некоторым клиентом и сервером, то есть что на клиенте что на сервере будет один общий интерфейс, а уже как будут передаваться данные между клиентом и сервером зависит только от вашей фантазии: по сети, через разделяемую память, да хоть по голубиной почте, нужно только найти Голубь SDK))) |
| Автор: LittleCat 9.8.2012, 12:59 | ||
| Господа. Прошу прощения сразу за мою неосведомленность. Опыта мало еще в этом вопросе. Но мне не удается обьяснить точно что я хочу. Я знаю что есть колбэк и использую его. Описываю ситуацию. Есть сервис винды. Написан мной. Работает как OPC( берет данные из определнного источника) клиент и складирует данные в базу. Сам работает прекрасно. Теперь есть необходимость отобразить эти данные "в режиме реального времени" на клиентах. Ок. для этого используем TCP и дуплекс( в данном конкретном используется дуплекс канальный, так как клиентом является другой сервис - фасад). Клиент выполняет запрос о том, какие данные ему нужны. Клиенту отображается лишь допустим 2 элемента массива данных, которые сервис архивирует в базу. Итак имеем - нужно отображать 2 элемента массива для клиента. Ок. Прислали от клиента параметр выбора. Сформировали ( должны сформировать ответ от сервиса и выкинуть через WCF обратно клиенту. ВОт тут и жопа. Напрямую передать от WCF к сервису винды данные и соответственно получит я не могу( не умею). А использовать канал связи клиент-сервер муторно. Учитывая что это только часть, а сервисов работает на машине уже 3 штуки.
собственно я так понимаю что после поднятия интерфейса в OnStart вы предлагаете связывать opcServer обьект с сервисом WCF дуплексом. вот и вопрос - есть ли способ проще. Ну или посоветуйте господа другую концепцию. Сижу уже 3 день - не могу придумать нифига и в нете не нашел пока. |