Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / Передать ссылку на сервер в исполняемый модуль - .NET-Remoting / 13 сообщений из 13, страница 1 из 1
04.12.2008, 08:36
    #35692289
Userus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать ссылку на сервер в исполняемый модуль - .NET-Remoting
Есть следующее:

Сервис:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
    public partial class ServiceUpdate: ServiceBase
    {
        private Thread StartWorkingAutoUpdate;
        public ServerUpdateURBD()
        {
            InitializeComponent();
            StartWorkingAutoUpdate = null;
        }

        protected override void OnStart(string[] args)
        {
            RemotingConfiguration.Configure("AutoUpdate.exe.config", false);
            StartWorkingAutoUpdate = new Thread(new ThreadStart(StartUpdate));
            StartWorkingAutoUpdate.Start();
        }

        protected override void OnStop()
        {
            if ((StartWorkingAutoUpdate != null) && (StartWorkingAutoUpdate.IsAlive))
            {
                StartWorkingAutoUpdate.Abort();
            }
        }

        protected void StartUpdate()
        {
            try
            {
                DoWorkUpdate classUpd = new DoWorkUpdate();
            }
            catch (ThreadAbortException)
            {
                Thread.ResetAbort();
                return;
            }
        }
    }
    public class classUpd
    {
        ....
    }
Который играет роль сервера. Есть исполняемый модуль:
Код: plaintext
1.
2.
3.
 public class UpdateDB : MarshalByRefObject
    {
        ....
    }
который передается клиентом на сервер (роль которого играет ServiceUpdate).
Код клиента не столь важен...
Такой вопрос: как в исполняемый модуль передать ссылку на сервис? То есть в исполняемом модуле
нужно вызвать метод, который прописан в классе сервиса..
Для чего это: Сервис создает поток при старте, в котором по таймеру некоторые действия
выполняются и нужно по некоторому событию в этом потоке выполнять метод... Уведомление о
событии идет с клиента. Клиент выполнит метод в исполняемом модуле (UpdateDB), который
уже выполнить метод в сервисе и, подписанный на событие метод в потоке(StartWorkingAutoUpdate = new Thread(new ThreadStart(StartUpdate)); ),
выполнится. Для всего этого нужна ссылка на сервис (иначе говоря this, но как её передать в исполняемый
модуль?).
...
Рейтинг: 0 / 0
04.12.2008, 13:37
    #35693375
Userus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать ссылку на сервер в исполняемый модуль - .NET-Remoting
Таки up... Ну хоть какие-нибудь мысли...
...
Рейтинг: 0 / 0
04.12.2008, 14:57
    #35693814
vagner
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать ссылку на сервер в исполняемый модуль - .NET-Remoting
Если честно, я ничего не понял, но для поддержания разговора.
Я так понимаю, исполняемый модуль в сервис Вы успешно передаете. Тогда сделайте в исполняемом модуле метод SetServiceReference ( ServiceUpdate ref ), сервис, получив модуль вызовет этот метод.
...
Рейтинг: 0 / 0
04.12.2008, 16:00
    #35694123
Userus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать ссылку на сервер в исполняемый модуль - .NET-Remoting
Да, модуль передается, исполняется, всё ок.
А как сервис вызовет этот метод?
...
Рейтинг: 0 / 0
04.12.2008, 16:01
    #35694128
Userus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать ссылку на сервер в исполняемый модуль - .NET-Remoting
Ведь сервис, по сути, ничего не знает о модуле...
...
Рейтинг: 0 / 0
04.12.2008, 16:05
    #35694150
D129
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать ссылку на сервер в исполняемый модуль - .NET-Remoting
UserusДа, модуль передается, исполняется, всё ок.
А как сервис вызовет этот метод?
Сервис вызовет любой метод "модуля" когда его запустят в OnStart()- первый раз из списка сервисов в контрольной панели - а потом - и при каждом рестарте (если будет automatic).
...
Рейтинг: 0 / 0
04.12.2008, 17:16
    #35694428
Userus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать ссылку на сервер в исполняемый модуль - .NET-Remoting
Изначально экземпляр модуля создается на клиенте и в нем происходит вызов метода модуля.. Метод исполняется на сервисе, но код вызова метода пишется на клиенте, в сервисе нет ни строчки из исполняемого модуля..
...
Рейтинг: 0 / 0
04.12.2008, 17:25
    #35694454
D129
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать ссылку на сервер в исполняемый модуль - .NET-Remoting
UserusИзначально экземпляр модуля создается на клиенте и в нем происходит вызов метода модуля.. Метод исполняется на сервисе, но код вызова метода пишется на клиенте, в сервисе нет ни строчки из исполняемого модуля..
Странноватая архитектура.
У вас что, сервис подключается по ремоутингу к клиенту? То есть Windows service сам является клиентом?
Как вы вообще это запускаете? в какой последовательности?
...
Рейтинг: 0 / 0
04.12.2008, 18:33
    #35694630
Userus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать ссылку на сервер в исполняемый модуль - .NET-Remoting
Нет, сервис является сервером.. Клиент - консольное приложение.. Я имею в виду, что в коде экземпляр модуля создается на клиенте, потом-то он выполняется на сервере..
SetServiceReference ( ServiceUpdate ref ) если в коде вот это написать и ref'ом передать this, то код не скомпилируется.. Или как ее надо вызвать правильно?
...
Рейтинг: 0 / 0
04.12.2008, 18:38
    #35694640
vagner
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать ссылку на сервер в исполняемый модуль - .NET-Remoting
В проект модуля подключить сборку (ну, или хотя бы прокси) сервиса?
...
Рейтинг: 0 / 0
04.12.2008, 19:06
    #35694711
Userus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать ссылку на сервер в исполняемый модуль - .NET-Remoting
vagnerВ проект модуля подключить сборку (ну, или хотя бы прокси) сервиса?
Это тоже сделал. Но что толку? Как получить ссылку на сам сервис, который запущен?
...
Рейтинг: 0 / 0
10.12.2008, 13:49
    #35705330
Userus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать ссылку на сервер в исполняемый модуль - .NET-Remoting
Вроде получилось...
В коде сервиса (который роль сервера играет) добавил:
Код: plaintext
RemotingServices.Marshal(this, "ServerObject");

В исполняемом модуле:
Код: plaintext
1.
2.
ServiceUpdate serv = new ServiceUpdate();
serv = (ServiceUpdate )Activator.GetObject(typeof(ServiceUpdate),
          String.Format("tcp://{0}:{1}/ServerObject",serverName, port));

Пока в рабочем проекте не пробовал, пока только потестил, но вроде как serv содержит ссылку на сервис..
...
Рейтинг: 0 / 0
13.12.2008, 14:50
    #35712566
Userus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать ссылку на сервер в исполняемый модуль - .NET-Remoting
А вот такой теперь вопрос, корректно ли вызвать напрямую метод сервиса из исполняемого модуля (потомка класса MarshalByRefObject):
Код: plaintext
1.
2.
3.
ServiceUpdate serv;
serv = (ServiceUpdate )Activator.GetObject(typeof(ServiceUpdate),
          String.Format("tcp://{0}:{1}/ServerObject",serverName, port));
serv.[Некий метод]
...
Рейтинг: 0 / 0
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / Передать ссылку на сервер в исполняемый модуль - .NET-Remoting / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]