Вобщем постараюсь в кратце объяснить суть проблемы.
Есть две проги, первая оформлена как сервис, и является RPC сервером, прослушка идёт по TCP по заданому порту.
Вторая позволяет управлять настройками первой (порт и ещё кой чего)
Вобщем трабла такая, стартуем сервис, он открывает прослушку всё гуд, но когда я пытаюсь поменять порт из настроечной проги он,
почему то, честно открывает прослушку на новом но не закрывает на страром.
работа с RPC идёт по следующей схеме
1) задаём параметры прослушки RpcServerUseProtseqEp
2) региструем сервис RpcServerRegisterIf
3) ставим на блокирующую прослушку RpcServerListen
4) если засекли что надо поменять порт останавливаем прослушку RpcMgmtStopServerListening
5) разрегистрируем сервер RpcServerUnregisterIf
6) повторяем цикл
модель сервера оформлена в двух потоках, первый главный, непосредственно поток сервиса, который отслеживает,
что настройки надо поменять и вызывает RpcMgmtStopServerListening (ну и управляет работой дочернего потока).
И дочерний поток в котором идёт регистрация, блокирующая прослушка и разрегистрация.
Есть идеи что я делаю не так при закрытии прослушки?
Здравствуйте, Autogen, Вы писали:
A>Вобщем постараюсь в кратце объяснить суть проблемы.
A>Есть две проги, первая оформлена как сервис, и является RPC сервером, прослушка идёт по TCP по заданому порту.
A>Вторая позволяет управлять настройками первой (порт и ещё кой чего)
A>Вобщем трабла такая, стартуем сервис, он открывает прослушку всё гуд, но когда я пытаюсь поменять порт из настроечной проги он,
A>почему то, честно открывает прослушку на новом но не закрывает на страром.
A>работа с RPC идёт по следующей схеме
A>1) задаём параметры прослушки RpcServerUseProtseqEp
A>2) региструем сервис RpcServerRegisterIf
A>3) ставим на блокирующую прослушку RpcServerListen
A>4) если засекли что надо поменять порт останавливаем прослушку RpcMgmtStopServerListening
A>5) разрегистрируем сервер RpcServerUnregisterIf
A>6) повторяем цикл
A>модель сервера оформлена в двух потоках, первый главный, непосредственно поток сервиса, который отслеживает,
A>что настройки надо поменять и вызывает RpcMgmtStopServerListening (ну и управляет работой дочернего потока).
A>И дочерний поток в котором идёт регистрация, блокирующая прослушка и разрегистрация.
A>Есть идеи что я делаю не так при закрытии прослушки?
Может это?
Note From the client-side, RpcMgmtStopServerListening is disabled by default. To enable this function, create an authorization function in your server application that returns TRUE (to allow a remote shutdown) whenever RpcMgmtStopServerListening is called. Use RpcMgmtSetAuthorizationFn to give the client access to the management function
В любом случае а что возвращает RpcMgmtStopServerListening ?
... << RSDN@Home 1.1.4 beta 4 rev. 303>>
Здравствуйте, Tom, Вы писали:
Tom>Здравствуйте, Autogen, Вы писали:
A>>Вобщем постараюсь в кратце объяснить суть проблемы.
A>>Есть две проги, первая оформлена как сервис, и является RPC сервером, прослушка идёт по TCP по заданому порту.
A>>Вторая позволяет управлять настройками первой (порт и ещё кой чего)
A>>Вобщем трабла такая, стартуем сервис, он открывает прослушку всё гуд, но когда я пытаюсь поменять порт из настроечной проги он,
A>>почему то, честно открывает прослушку на новом но не закрывает на страром.
A>>работа с RPC идёт по следующей схеме
A>>1) задаём параметры прослушки RpcServerUseProtseqEp
A>>2) региструем сервис RpcServerRegisterIf
A>>3) ставим на блокирующую прослушку RpcServerListen
A>>4) если засекли что надо поменять порт останавливаем прослушку RpcMgmtStopServerListening
A>>5) разрегистрируем сервер RpcServerUnregisterIf
A>>6) повторяем цикл
A>>модель сервера оформлена в двух потоках, первый главный, непосредственно поток сервиса, который отслеживает,
A>>что настройки надо поменять и вызывает RpcMgmtStopServerListening (ну и управляет работой дочернего потока).
A>>И дочерний поток в котором идёт регистрация, блокирующая прослушка и разрегистрация.
A>>Есть идеи что я делаю не так при закрытии прослушки?
Tom>Может это?
Tom>Tom>Note From the client-side, RpcMgmtStopServerListening is disabled by default. To enable this function, create an authorization function in your server application that returns TRUE (to allow a remote shutdown) whenever RpcMgmtStopServerListening is called. Use RpcMgmtSetAuthorizationFn to give the client access to the management function
Tom>В любом случае а что возвращает RpcMgmtStopServerListening ?
Не это не из той оперы, в этой статье говорится о вызове RpcMgmtStopServerListening с клиентской стороны, действительно такой приём существует, но здесь он абсолютно не к месту=))))
В данном примере RpcMgmtStopServerListening вызывается на сервере и отрабатывает нормально (читай возвращает RPC_S_OK),
в противном случае дочерний поток не смог бы завершится=))))) Но в том то и дело что он завершается, прослушка разрегистриуется и ресурсы потока я освобождаю что бы запустить по новой на новом порту, но видимо что то я не доделал и фактически прослушка на старом порту остаётся.