.Net Remoting на 2 сетевых интерфейсах
От: Logot Украина  
Дата: 08.07.10 14:01
Оценка:
Добрый день, возникла такая проблема
Есть сервер, на котором стоят 2 сетевые карты на разных сетевых интерфейсах — 10.0.* и 192.168.*. На сервера запущен сервис, которая по .Net Remoting по определенному порту слушает клиентов и позволяет подписываться клиентам на событие, которые могут в ней возникать. Есть клиентская часть в подсети 10.0.*, которая работает со службой и получает от нее события. Так вот, когда на сервере стоят 2 сетевые карты, то клиент не может подключится к удаленной службе и подписаться на ее события, а когда воткнута одна с сетью 10.0.* то проблем нет и все работает.
Вопрос, как работает .Net Remoting, как можно настроить его, чтобы он работал с нужной мне подсетью? А то получается, что он слушает подсеть 192.168.* когда на машине есть 2 сетевых интерфейса, а сеть 10.0.* не хочет
Re: .Net Remoting на 2 сетевых интерфейсах
От: winmike Германия  
Дата: 08.07.10 14:14
Оценка:
Здравствуйте, Logot, Вы писали:

L>Добрый день, возникла такая проблема

L>Есть сервер, на котором стоят 2 сетевые карты на разных сетевых интерфейсах — 10.0.* и 192.168.*. На сервера запущен сервис, которая по .Net Remoting по определенному порту слушает клиентов и позволяет подписываться клиентам на событие, которые могут в ней возникать. Есть клиентская часть в подсети 10.0.*, которая работает со службой и получает от нее события. Так вот, когда на сервере стоят 2 сетевые карты, то клиент не может подключится к удаленной службе и подписаться на ее события, а когда воткнута одна с сетью 10.0.* то проблем нет и все работает.
L>Вопрос, как работает .Net Remoting, как можно настроить его, чтобы он работал с нужной мне подсетью? А то получается, что он слушает подсеть 192.168.* когда на машине есть 2 сетевых интерфейса, а сеть 10.0.* не хочет

попробуй:
а) прописать в hosts какое-нибуль уникальной имя для 10.0.*
б) используй это имя при binding на сервере
в) используй TCPView или ProcessExplorer, чтобы удостовериться, какой порт какого интерфейса слушается сервисом
Re: .Net Remoting на 2 сетевых интерфейсах
От: master_of_dp Беларусь  
Дата: 08.07.10 14:22
Оценка:
Здравствуйте, Logot, Вы писали:

L>Добрый день, возникла такая проблема

L>Есть сервер, на котором стоят 2 сетевые карты на разных сетевых интерфейсах — 10.0.* и 192.168.*. На сервера запущен сервис, которая по .Net Remoting по определенному порту слушает клиентов и позволяет подписываться клиентам на событие, которые могут в ней возникать. Есть клиентская часть в подсети 10.0.*, которая работает со службой и получает от нее события. Так вот, когда на сервере стоят 2 сетевые карты, то клиент не может подключится к удаленной службе и подписаться на ее события, а когда воткнута одна с сетью 10.0.* то проблем нет и все работает.
L>Вопрос, как работает .Net Remoting, как можно настроить его, чтобы он работал с нужной мне подсетью? А то получается, что он слушает подсеть 192.168.* когда на машине есть 2 сетевых интерфейса, а сеть 10.0.* не хочет


А если в конфиге *.exe.config клиента явно прописать:


<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
............ что-то там
</appSettings>
<system.runtime.remoting>
<application>
<channels>
<channel ref="tcp" port="0" machineName="192.168.0.32">
..................


Ключевой момент — указание явного адреса machineName (клиента), по которому и надо слушать.
Re[2]: .Net Remoting на 2 сетевых интерфейсах
От: Logot Украина  
Дата: 08.07.10 14:28
Оценка:
Здравствуйте, master_of_dp, Вы писали:

__>А если в конфиге *.exe.config клиента явно прописать:



__><?xml version="1.0" encoding="utf-8" ?>

__><configuration>
__> <appSettings>
__> ............ что-то там
__> </appSettings>
__> <system.runtime.remoting>
__> <application>
__> <channels>
__> <channel ref="tcp" port="0" machineName="192.168.0.32">
__> ..................


__>Ключевой момент — указание явного адреса machineName (клиента), по которому и надо слушать.


Я инициализирую Remoting программно, вот так:

                RemotingConfiguration.CustomErrorsMode = CustomErrorsModes.Off;
                BinaryServerFormatterSinkProvider serverSinkProvider =
                    new BinaryServerFormatterSinkProvider();
                serverSinkProvider.TypeFilterLevel = TypeFilterLevel.Full;

                BinaryClientFormatterSinkProvider clientSinkProvider =
                    new BinaryClientFormatterSinkProvider();

                IDictionary properties = new Hashtable();
                properties["port"] = Config<StopNet4SrvConfig>.Instance.Port;
                properties["typeFilterLevel"] = TypeFilterLevel.Full;

                //_channel = new HttpChannel(properties, clientSinkProvider, serverSinkProvider);
                _channel = new TcpChannel(properties, clientSinkProvider,
                                          serverSinkProvider);

                ChannelServices.RegisterChannel(_channel, false);

                ////******************************////
                WellKnownServiceTypeEntry sessiontype =
                    new WellKnownServiceTypeEntry(typeof (Session), uri, WellKnownObjectMode.Singleton);
                RemotingConfiguration.RegisterWellKnownServiceType(sessiontype);

                _session = new Session(Logger);

                RemotingServices.SetObjectUriForMarshal(_session, uri);
                RemotingServices.Marshal(_session, uri);


где тут указать machineName?
Re[2]: .Net Remoting на 2 сетевых интерфейсах
От: Logot Украина  
Дата: 08.07.10 14:36
Оценка:
Здравствуйте, master_of_dp, Вы писали:


__><?xml version="1.0" encoding="utf-8" ?>

__><configuration>
__> <appSettings>
__> ............ что-то там
__> </appSettings>
__> <system.runtime.remoting>
__> <application>
__> <channels>
__> <channel ref="tcp" port="0" machineName="192.168.0.32">
__> ..................


__>Ключевой момент — указание явного адреса machineName (клиента), по которому и надо слушать.


насколько я понял это нужно прописать тут:

                RemotingConfiguration.CustomErrorsMode = CustomErrorsModes.Off;
                BinaryServerFormatterSinkProvider serverSinkProvider =
                    new BinaryServerFormatterSinkProvider();
                serverSinkProvider.TypeFilterLevel = TypeFilterLevel.Full;

                BinaryClientFormatterSinkProvider clientSinkProvider =
                    new BinaryClientFormatterSinkProvider();

                IDictionary properties = new Hashtable();
                properties["port"] = Config<StopNet4SrvConfig>.Instance.Port;
                properties["typeFilterLevel"] = TypeFilterLevel.Full;
                properties["machineName"] = "XXX.XXX.XXX.XXX";

                //_channel = new HttpChannel(properties, clientSinkProvider, serverSinkProvider);
                _channel = new TcpChannel(properties, clientSinkProvider,
                                          serverSinkProvider);

                ChannelServices.RegisterChannel(_channel, false);

                ////******************************////
                WellKnownServiceTypeEntry sessiontype =
                    new WellKnownServiceTypeEntry(typeof (Session), uri, WellKnownObjectMode.Singleton);
                RemotingConfiguration.RegisterWellKnownServiceType(sessiontype);

                _session = new Session(Logger);

                RemotingServices.SetObjectUriForMarshal(_session, uri);
                RemotingServices.Marshal(_session, uri);
Re[3]: .Net Remoting на 2 сетевых интерфейсах
От: master_of_dp Беларусь  
Дата: 08.07.10 14:40
Оценка: 2 (1)
Здравствуйте, Logot, Вы писали:

L>Здравствуйте, master_of_dp, Вы писали:


__>>А если в конфиге *.exe.config клиента явно прописать:



__>><?xml version="1.0" encoding="utf-8" ?>

__>><configuration>
__>> <appSettings>
__>> ............ что-то там
__>> </appSettings>
__>> <system.runtime.remoting>
__>> <application>
__>> <channels>
__>> <channel ref="tcp" port="0" machineName="192.168.0.32">
__>> ..................


__>>Ключевой момент — указание явного адреса machineName (клиента), по которому и надо слушать.


L>Я инициализирую Remoting программно, вот так:


L>
L>                RemotingConfiguration.CustomErrorsMode = CustomErrorsModes.Off;
L>                BinaryServerFormatterSinkProvider serverSinkProvider =
L>                    new BinaryServerFormatterSinkProvider();
L>                serverSinkProvider.TypeFilterLevel = TypeFilterLevel.Full;

L>                BinaryClientFormatterSinkProvider clientSinkProvider =
L>                    new BinaryClientFormatterSinkProvider();

L>                IDictionary properties = new Hashtable();
L>                properties["port"] = Config<StopNet4SrvConfig>.Instance.Port;
L>                properties["typeFilterLevel"] = TypeFilterLevel.Full;
                  
//////////////////////////////////////////////////////////////////////////////////////////////////////////                  
                  properties["machineName"] = "192.168.1.23"
//////////////////////////////////////////////////////////////////////////////////////////////////////////



L>                //_channel = new HttpChannel(properties, clientSinkProvider, serverSinkProvider);
L>                _channel = new TcpChannel(properties, clientSinkProvider,
L>                                          serverSinkProvider);

L>                ChannelServices.RegisterChannel(_channel, false);

L>                ////******************************////
L>                WellKnownServiceTypeEntry sessiontype =
L>                    new WellKnownServiceTypeEntry(typeof (Session), uri, WellKnownObjectMode.Singleton);
L>                RemotingConfiguration.RegisterWellKnownServiceType(sessiontype);

L>                _session = new Session(Logger);

L>                RemotingServices.SetObjectUriForMarshal(_session, uri);
L>                RemotingServices.Marshal(_session, uri);
L>


L>где тут указать machineName?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.