powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / Передать ссылку на сервер в исполняемый модуль - .NET-Remoting
13 сообщений из 13, страница 1 из 1
Передать ссылку на сервер в исполняемый модуль - .NET-Remoting
    #35692289
Userus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть следующее:

Сервис:
Код: 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
Передать ссылку на сервер в исполняемый модуль - .NET-Remoting
    #35693375
Userus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таки up... Ну хоть какие-нибудь мысли...
...
Рейтинг: 0 / 0
Передать ссылку на сервер в исполняемый модуль - .NET-Remoting
    #35693814
vagner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если честно, я ничего не понял, но для поддержания разговора.
Я так понимаю, исполняемый модуль в сервис Вы успешно передаете. Тогда сделайте в исполняемом модуле метод SetServiceReference ( ServiceUpdate ref ), сервис, получив модуль вызовет этот метод.
...
Рейтинг: 0 / 0
Передать ссылку на сервер в исполняемый модуль - .NET-Remoting
    #35694123
Userus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, модуль передается, исполняется, всё ок.
А как сервис вызовет этот метод?
...
Рейтинг: 0 / 0
Передать ссылку на сервер в исполняемый модуль - .NET-Remoting
    #35694128
Userus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ведь сервис, по сути, ничего не знает о модуле...
...
Рейтинг: 0 / 0
Передать ссылку на сервер в исполняемый модуль - .NET-Remoting
    #35694150
Фотография D129
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UserusДа, модуль передается, исполняется, всё ок.
А как сервис вызовет этот метод?
Сервис вызовет любой метод "модуля" когда его запустят в OnStart()- первый раз из списка сервисов в контрольной панели - а потом - и при каждом рестарте (если будет automatic).
...
Рейтинг: 0 / 0
Передать ссылку на сервер в исполняемый модуль - .NET-Remoting
    #35694428
Userus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изначально экземпляр модуля создается на клиенте и в нем происходит вызов метода модуля.. Метод исполняется на сервисе, но код вызова метода пишется на клиенте, в сервисе нет ни строчки из исполняемого модуля..
...
Рейтинг: 0 / 0
Передать ссылку на сервер в исполняемый модуль - .NET-Remoting
    #35694454
Фотография D129
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UserusИзначально экземпляр модуля создается на клиенте и в нем происходит вызов метода модуля.. Метод исполняется на сервисе, но код вызова метода пишется на клиенте, в сервисе нет ни строчки из исполняемого модуля..
Странноватая архитектура.
У вас что, сервис подключается по ремоутингу к клиенту? То есть Windows service сам является клиентом?
Как вы вообще это запускаете? в какой последовательности?
...
Рейтинг: 0 / 0
Передать ссылку на сервер в исполняемый модуль - .NET-Remoting
    #35694630
Userus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, сервис является сервером.. Клиент - консольное приложение.. Я имею в виду, что в коде экземпляр модуля создается на клиенте, потом-то он выполняется на сервере..
SetServiceReference ( ServiceUpdate ref ) если в коде вот это написать и ref'ом передать this, то код не скомпилируется.. Или как ее надо вызвать правильно?
...
Рейтинг: 0 / 0
Передать ссылку на сервер в исполняемый модуль - .NET-Remoting
    #35694640
vagner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В проект модуля подключить сборку (ну, или хотя бы прокси) сервиса?
...
Рейтинг: 0 / 0
Передать ссылку на сервер в исполняемый модуль - .NET-Remoting
    #35694711
Userus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vagnerВ проект модуля подключить сборку (ну, или хотя бы прокси) сервиса?
Это тоже сделал. Но что толку? Как получить ссылку на сам сервис, который запущен?
...
Рейтинг: 0 / 0
Передать ссылку на сервер в исполняемый модуль - .NET-Remoting
    #35705330
Userus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вроде получилось...
В коде сервиса (который роль сервера играет) добавил:
Код: 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
Передать ссылку на сервер в исполняемый модуль - .NET-Remoting
    #35712566
Userus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот такой теперь вопрос, корректно ли вызвать напрямую метод сервиса из исполняемого модуля (потомка класса MarshalByRefObject):
Код: plaintext
1.
2.
3.
ServiceUpdate serv;
serv = (ServiceUpdate )Activator.GetObject(typeof(ServiceUpdate),
          String.Format("tcp://{0}:{1}/ServerObject",serverName, port));
serv.[Некий метод]
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / Передать ссылку на сервер в исполняемый модуль - .NET-Remoting
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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