Как мне получить 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, чтобы иметь подобное расширение