Информация об изменениях

Сообщение Re[2]: .Net remoting и шлюз от 12.03.2015 12:02

Изменено 12.03.2015 12:06 Kostya33

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

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


K>>Насколько я понимаю, мне нужно передать на сервер IP клиента, но где в серверной части нужно производить замену обратного адреса?

N_C>На клиенте есть конфигурация, где указан IP-адрес сервера. Подмените IP-адрес в биндинге на клиенте для начала.
Не совсем понял о какой конфигурации идет речь.

у меня соединение с сервером устанавливается так:

string uri = String.Format(@"tcp://{0}:{1}", ip, port);
RemotingConfiguration.RegisterActivatedClientType(typeof(ServerImpRemotingProxy), uri);

server = new ServerImpRemotingProxy();


ServerImpRemotingProxy — это объект который будет создан на стороне сервера. Слово Proxy пусть не смущает, это просто объект, который реализует мой интерфейс
Re[2]: .Net remoting и шлюз
Здравствуйте, Nikolay_Ch, Вы писали:

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


K>>Насколько я понимаю, мне нужно передать на сервер IP клиента, но где в серверной части нужно производить замену обратного адреса?

N_C>На клиенте есть конфигурация, где указан IP-адрес сервера. Подмените IP-адрес в биндинге на клиенте для начала.
Не совсем понял о какой конфигурации идет речь.

у меня соединение с сервером устанавливается так:

string uri = String.Format(@"tcp://{0}:{1}", ip, port);
RemotingConfiguration.RegisterActivatedClientType(typeof(ServerImpRemotingProxy), uri);

server = new ServerImpRemotingProxy();


ServerImpRemotingProxy — это объект который будет создан на стороне сервера. Слово Proxy пусть не смущает, это просто объект, который реализует мой интерфейс


Еще есть такой код
Он тоже работает, но в uri и так правильный адрес сервера, подменять там нечего
    public class NmsIpClientSinkProvider : IClientChannelSinkProvider
    {
        private IClientChannelSinkProvider _nextProvider = null;
        private string _serverHostNameOrIp;

        public NmsIpClientSinkProvider(string hostNameorIp)
        {
            if (String.IsNullOrEmpty(hostNameorIp))
                throw new ArgumentNullException("hostNameorIp == null");

          _serverHostNameOrIp = hostNameorIp;
        }

        public IClientChannelSink CreateSink(IChannelSender channel, string url, object remoteChannelData)
        {

            if (!url.Contains(_serverHostNameOrIp)) 
            { 
                string oldIp = url.Substring(6).Remove(url.LastIndexOf(':') - 6);
                url = url.Replace(oldIp, _serverHostNameOrIp);
            } 

            IClientChannelSink nextSink = _nextProvider.CreateSink(channel, url, remoteChannelData);
            return (new NmsClientChannelSink(nextSink, _serverHostNameOrIp));
        }

        public IClientChannelSinkProvider Next
        {
            get { return _nextProvider; }
            set { _nextProvider = value; }
        }

    }