Как мне получить IP-адрес моего клиента Corba от сервера?

У меня есть клиент C++, публикующий сообщения Corba на сервер aC# через omniOrb. Я зарегистрировал PortableInterceptor в Orb на стороне сервера и могу перехватывать сообщения. В отладке я получаю сообщение ServerRequestInfo в перехвате и в окне просмотра отладки можно увидеть весь путь до RemoteEndPort с IP-адресом клиента. Однако у многих из этих классов есть закрытые члены, к которым я не могу получить доступ в коде.

Как мне это сделать?

Вот мой код

// register the OrbInitialiser here in some  code
omg.org.CORBA.OrbServices orb = omg.org.CORBA.OrbServices.GetSingleton();
orb.RegisterPortableInterceptorInitalizer( new LT.Quantifi.BrokerOrbInitialiser());
orb.CompleteInterceptorRegistration();

// register the Inteceptor in the OrbInitialiser here
public class BrokerOrbInitialiser : omg.org.PortableInterceptor.ORBInitializer
{
    public void post_init(ORBInitInfo info)
    {
        BrokerRequestInterceptor serverRequests = new BrokerRequestInterceptor();
        info.add_server_request_interceptor(serverRequests);
     }
}

// Inteceptor catches messages here
Public class BrokerRequestInterceptor : omg.org.PortableInterceptor.ServerRequestInterceptor
{
.
.
    public void receive_request_service_contexts(ServerRequestInfo ri)
    {
        Console.WriteLine("I catch messages here");
    }
.
.
}

1 ответ

Не существует стандартного способа получить доступ к этой информации в CORBA. Некоторые реализации имеют собственный способ получения некоторой информации, например, у TAO есть текущий транспортный объект, к которому вы можете получить доступ. В момент получения вызова с использованием IIOP вы можете сузить его до транспортного тока IIOP, который затем предоставляет вам эту информацию. Похоже, вам нужно расширение для C# ORB, чтобы иметь подобное расширение

Другие вопросы по тегам