![]() |
Модераторы: gambit |
![]() ![]() ![]() |
|
Alexsar |
|
||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 96 Регистрация: 6.5.2005 Репутация: нет Всего: 1 |
вот есть проблема
написал прогу, но с жёстко заданным протоколом и номером порта, есть желание сделать конфиг файл в котором буду настраивать сам ремотинг но когда пользую конфиг файл (объект активизируется сервером), складывается такое ощущение, что объект с клиентской активизацией!! хотя в коде конфига чётко написано <wellknown type ="RemOb.Messager, Messager" url ="tcp://Ale:4000/Messager"/> т.е. при срабатывании события другие клиенты "не видят" этого, более того члены удалённого объекта ведут себя как при клиентской активизацией что не так может я что то пропустил? вот коды (сокращённые) сервак
клиент
и конфиг для клиента
для сервера не привожу конфиг и как надо правильно написать и использовать конфиг, чтоб результаты были идентичны результатам работы проги без конфигов ![]() |
||||||
|
|||||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 2 Всего: 232 |
Снова события + ремоутинг. Сколько раз нужно повторить, что в архитектуре взаимодействия "клиент-сервер" сервер не может отправлять сообщения клиенту, в терминах ремоутинга - сервер не может самостоятельно вызывать методы клиента ! События в .NET - лишь удобная надстройка над вызовом методов по ссылке. Поэтому ожидать что сервер сгенерирует событие, а все подписанные на событие клиенты обработают его - бесполезно.
-------------------- ![]() |
|||
|
||||
Alexsar |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 96 Регистрация: 6.5.2005 Репутация: нет Всего: 1 |
TO mr.DUDA
вопрос с событиями я уже решил, я запостил про это в той же теме ![]() скажем я написал простое приложение, пусть удалённый объект содержит переменную(пусть равную 5) и свойство для задания и получения данной переменной активизация серверная, допустим клиент сначала запрашивает эту переменную через свойсво, а затем меняет её на другое(т.е. было скажем 5 стало 34), после эта прога ничего не меняет, запускаем вторую второй клиент при запуске делает тоже самое, т.е. зарпашивает и меняет весь трабл заключается в следущем: если производить настройку ремотинга программно, то результат будет следущим первая прога выведет на консоль сначала 5 затем поменяет переменную на 34 вторая - выведет 34 и поменяет на какое-либо другое значение т.е. всё происходит как и должно быть но при настройке ремотинга через конфиг работа прог будет иная первая прога выведет 5, затем изменит на 34, а вторая должна вывести на консоль 34, но выводит почему то снова 5! т.е. складывается такое ощущение что объект активизируется клиентом а тот код я просто привёл ради примера, сожалею что ввёл в заблуждение своими траблами с событиями, но оно того стоило, что б с ними разобраться раз и навсегда ![]() так как же надо писать конфиги, что изменить? всем спасибо ![]() |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 2 Всего: 232 |
Покажи конфиг сервака, там есть mode="Singleton" в теге <wellknown> ? И <lifetime> из клиентского конфига убрать можно, клиент не управляет временем жизни при серверной активации.
Кстати, готовился тут к экзамену, проскочил вопрос о приложении типа чата - там все клиенты подписываются на события сервера и обрабатывают их, так правильный ответ был таким: ...bla-bla-bla... subscribe on ChatServer events in the ChatClient class; start listening on Http (для примера) port in the client application. -------------------- ![]() |
|||
|
||||
Alexsar |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 96 Регистрация: 6.5.2005 Репутация: нет Всего: 1 |
вот конфиг сервера
кажись так, пишу по памяти кстати на тему чата, это я и сделал, тока теперь охота чтоб через конфиги всё работало, так ведь намного круче и легче и мне не придётся перекомпилировать ![]() |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 2 Всего: 232 |
Порты не совпадают: в одном конфиге 4040, в другом - 4000, вот клиент и создаёт объект локально.
-------------------- ![]() |
|||
|
||||
Alexsar |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 96 Регистрация: 6.5.2005 Репутация: нет Всего: 1 |
всем доброй ночи
мне так и не понятно, в чём причина глюков с настройкой ремотинга через конфиг вот простое приложение, суть работы в следущем: на сервере живёт удалённый объект, у него есть закрытый член типа double и 2 метода для получения и установления этой переменной в новое состояние клиент выводит эту переменную на консоль и изменяет её, затем можно будет запустить второй клиент и о чудо, если клиент настроить программно, то всё работает, он выводит на экран новое значение переменной; но горе будет, если настроить через конфиг - ничего не меняется так где же ошибка? ![]() вот мой проект Это сообщение отредактировал(а) Alexsar - 24.12.2006, 02:34 Присоединённый файл ( Кол-во скачиваний: 5 ) ![]() |
|||
|
||||
Alexsar |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 96 Регистрация: 6.5.2005 Репутация: нет Всего: 1 |
всех с праздниками!
у всех всё работает с конфигами? дайте хотя бы свой проект, погляжу как надо делать правильно ![]() и ещё раз всех с праздниками |
|||
|
||||
Alexsar |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 96 Регистрация: 6.5.2005 Репутация: нет Всего: 1 |
ну что никто не делал что ли через конфиг? ну может кто пробовал компилить код?
хотя бы напишите, как у вас работает прога, вдруг у меня студия с приколами ![]() а то вовсе беда ![]() |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 2 Всего: 232 |
Нужно правильно указывать полное имя класса в wellknown type="...". В приведённом примере оно "RemOb.Messager, RemOb", а должно быть "Messager,RemOb", либо нужно поместить класс Messager в namespace RemOb. Вот рабочий вариант этого же примера:
Присоединённый файл ( Кол-во скачиваний: 12 ) ![]() -------------------- ![]() |
|||
|
||||
Alexsar |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 96 Регистрация: 6.5.2005 Репутация: нет Всего: 1 |
TO mr.DUDA всё зароботало
только возникла новая проблема, и вновь с событиями при попытке генерации события, объект почему то не может обработать BegiInvoke и генерирует исключение: System.Runtime.Remoting.RemotingException: This remoting proxy has no channel sink which means either the server has no registered server channels that are listening, or this application has no suitable client channel to talk to the server. at System.Runtime.Remoting.Proxies.RemotingProxy.InternalInvoke(IMethodCallMe ssage reqMcmMsg, Boolean useDispatchMessage, Int32 callType) at System.Runtime.Remoting.Proxies.RemotingProxy.Invoke(IMessage reqMsg) at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgDa ta, Int32 type) at RemOb.MsgEventHandler.BeginInvoke(String msg, AsyncCallback callback, Obje ct object) at RemOb.Messager.Notify(String msg) in D:\codes\temp\RemOb\RemOb\Class1.cs:line 36 хотя при программной настройке всё работает, что ещё я забыл сделать? вот новый проект Присоединённый файл ( Кол-во скачиваний: 4 ) ![]() |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 2 Всего: 232 |
Чтобы клиент обрабатывал события от сервера, клиент должен быть одновременно и сервером, т.е. слушать на каком-л. порту, и выставлять наружу тот же класс Messager.
-------------------- ![]() |
|||
|
||||
Alexsar |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 96 Регистрация: 6.5.2005 Репутация: нет Всего: 1 |
то есть что нужно сделать в конфиге? зарегесрировать этот удалённый объект в кофиге клиента как на сервере? или надо в коде клиента это отразить?
|
|||
|
||||
Alexsar |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 96 Регистрация: 6.5.2005 Репутация: нет Всего: 1 |
а вопрос так и остаётся открытым
![]() |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 2 Всего: 232 |
да -------------------- ![]() |
|||
|
||||
Unlocker |
|
||||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 2.11.2007 Где: Москва - Знаменск (Капустин Яр) Репутация: нет Всего: 2 |
Поюзал поиск. Решил, что эта тема наиболее близкая к моей проблеме.
Проблема в том, что не могу прикрутить конфиг-файл для Windows-service, получаю почему-то FileNotFoundException, обернутый в RemotingException.
Для того, чтобы ошибка не появлялась предусмотрел копирование инсталлятором конфига в директорию установки, и проверял, чтобы копирование выполнялось. Для лучшего понимания приведу пример кода, в котором задана конфигурация и пример конфиг-файла. Пример жестко закодированной конфигурации.
Конфиг-файл сервиса(сервера)
Где сервис после установки ищет файл конфига, если в папке сервиса лежит файл конфига, а вызов осуществляется следующим образом:
С клиентом все оказалось проще: конфиг нашелся при указании правильного относительного пути. А вот служба заставляет поломать голову. Выскажите свои соображения, пожалуйста. Это сообщение отредактировал(а) Unlocker - 7.5.2009, 13:07 --------------------
"Если бы Шекспир был программистом, то фразу "To be or not to be" он написал бы так: 2b | ! 2b." |
||||||||
|
|||||||||
Unlocker |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 2.11.2007 Где: Москва - Знаменск (Капустин Яр) Репутация: нет Всего: 2 |
Bug fixed!
Как всегда проблемы кроются в недокументированных действиях прикладного ПО, к которому осуществляется привязка. При инициализации платформы, та неявным образом выставляет папку по умолчанию, отличную от директории exe'шника. С этим и были основные проблемы. --------------------
"Если бы Шекспир был программистом, то фразу "To be or not to be" он написал бы так: 2b | ! 2b." |
|||
|
||||
Unlocker |
|
||||||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 2.11.2007 Где: Москва - Знаменск (Капустин Яр) Репутация: нет Всего: 2 |
Возник еще вопрос, касающийся файлов конфигурации.
При конфигурировании Remoting получаю "интересный" эффект. При жестком кодировании конфигурации все работает нормально. При вызове new создается проксик реального объекта. При использовании процедуры RemotingConfiguration.Configure() эффект несколько отличается от желаемого. Для сравнения работы двух методов проводим вывод на экран записи зарегистрированного типа для сервера методом:
Записи, выводимые с помощью вышеприведенного метода, совпадают (зрительно). После чтения файла конфига, при вызове метода new на клиенте получаем реальный объект типа вместо проксика. В чем тут могут быть проблемы? Примеры своих конфигов привожу ниже:
PS: Среда разработки VS2003 Это сообщение отредактировал(а) Unlocker - 18.6.2009, 14:09 --------------------
"Если бы Шекспир был программистом, то фразу "To be or not to be" он написал бы так: 2b | ! 2b." |
||||||||||
|
|||||||||||
Unlocker |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 2.11.2007 Где: Москва - Знаменск (Капустин Яр) Репутация: нет Всего: 2 |
Проблема, описанная выше, несколько конкретизировалась.
Дело, наверное, не в конфиг-файле (он составлен грамотно), а в несколько другом ракурсе. Попробовал парсить конфиг файл вручную, но столкнулся с невозможностью загрузить нужную сборку при помощи метода LoadFrom() класса System.Runtime.Reflection.Assembly. Пробовал указывать полный путь в файловой системе (хотя нужный файл статически привязан к проекту, сборка находится в References проекта). Получаю сообщение:
В конечном итоге получается следующее. Если грузить тип в RemotingConfiguration через статическую привязку (жёстко в коде), то все работает без нареканий. Как только мы меняем статику на динамику (через конфиг-файл, а там используется неявно пространство System.RuntimeReflection), то получаем фигуру из трех пальцев. ![]() Какие направления можно еще попробовать? Это сообщение отредактировал(а) Unlocker - 19.6.2009, 17:39 --------------------
"Если бы Шекспир был программистом, то фразу "To be or not to be" он написал бы так: 2b | ! 2b." |
|||
|
||||
PashaPash |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 6 Всего: 49 |
Unlocker, выдели интерфейс из Neolant.PW_Param.BL.Facade, перенеси его в отдельную сборку, добавь на нее референс на клиенте, или просто положи в бинарники.
|
|||
|
||||
Unlocker |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 2.11.2007 Где: Москва - Знаменск (Капустин Яр) Репутация: нет Всего: 2 |
PashaPash, по большому счету так и сделано.
Facade класс отдельного проекта библиотеки, я его статически привязал и к клиенту, и к серверу. Сделал "кривой" (но рабочий) вариант статической привязки с участием конфига (наличие конфига - догма ![]() ![]() Дошло до того, что тестировал попытки прямой загрузки сборки с помощью функции Reflection.Assembly.LoadFrom(), но не тут то было - вылезало исключение о невозможности загрузки сборки по полному пути к файлу. Вот эта проблема меня на настоящий момент занимает. Может с настройками что-то не так? ![]() --------------------
"Если бы Шекспир был программистом, то фразу "To be or not to be" он написал бы так: 2b | ! 2b." |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, cully, mr.DUDA, Exception. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Распределённые приложения и сеть | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |