Windows - статьи

       

Регистрация remoting-объекта


Превращение любого приложения в remoting-сервер всегда начинается с подключения remoting-объекта в качестве Reference. Это выполняется следующим образом: необходимо навести курсор на имя  проекта будущего remoting-сервера в окне Solution Explorer в VS и, нажав правую кнопку мыши, выбрать Properties. В открывшемся окне нажать кнопку «Add New Reference»  и в закладке «Browse» выбрать dll-файл remoting-объекта.

После этого можно приступить к созданию класса регистрации remoting-объекта. Для этого к старому проекту на родном C++ добавляются файлы Rmt_reg.h и Rmt_reg.cpp со следующим кодом на C++/CLI:

//Rmt_reg.h //регистрация remoting-объекта   #include "stdafx.h" #include "mngCover.h"  // Управляемый класс-обертка для неуправляемых методов   #using <mscorlib.dll> #using <System.Dll> #using <System.Runtime.Remoting.Dll> using namespace System; using namespace System::Runtime; using namespace System::Runtime::Remoting; using namespace System::Runtime::Remoting::Channels; using namespace System::Runtime::Remoting::Channels::Tcp; using namespace Rmt_obj; //пространтво имен remoting-объекта   namespace Rmt_reg {         public ref class CRmtReg         {                 private:                        TcpChannel^ m_chan;                 public:                        CRmtReg(CMngCover^ pMngCover);   //конструктор         }; }

// Rmt_reg.cpp //регистрация remoting-объекта   #include "Rmt_reg.h"   using namespace System; using namespace System::Runtime; using namespace System::Runtime::Remoting; using namespace System::Runtime::Remoting::Channels; using namespace System::Runtime::Remoting::Channels::Tcp;   namespace Rmt_reg {         CRmtReg::CRmtReg(CMngCover^ pMngCover) //конструктор         {                 m_chan = gcnew TcpChannel(8085); //создаем канал                ChannelServices::RegisterChannel(m_chan, false); //регистрируем                   //описание переменной remoting-класса                 CRmtngObj^ rmClass;                 rmClass = gcnew CRmtngObj(); //создание remoting-класса                   // регистрация remoting-класса                ObjRef^ refClass = RemotingServices::Marshal(rmClass, "RemoteTest");                   // инициализация delegate для метода method_PutStr                 rmClass->ev_method_PutStr +=                   gcnew CRmtngObj:: dlg_method_PutStr(pMngCover, &(CMngCover::mng_method_PutStr) );                   // инициализация delegate для метода method_GetStr                 rmClass-> ev_method_GetStr +=                   gcnew CRmtngObj:: dlg_method_GetStr(pMngCover, &(CMngCover::mng_method_GetStr) );         }; }  

Класс регистрации remoting-объекта должен не только его зарегистрировать, но  и создав, выполнить его инициализацию. Для этого используется уже созданный объект управляемого класса-обертки неуправляемых методов, поэтому в заголовочный файл «Класса регистрации remoting-объекта» добавлен #include на описание класса-обертки.

Класс регистрации remoting-объекта реализуется на управляемом коде (порядок включения режима компиляции с поддержкой CLR описан выше в разделе «Модули на С++/CLI в проекте С++»).



Содержание раздела