2015-03-08 4 views
1

У меня есть служба Windows C++, открывающая интерфейс .Net Remoting для использования локальным клиентом, и все работает отлично до тех пор, пока IP-адрес не изменится.Изменение IP-адреса в службе .NET 2.0 Remoting прерывает новые клиенты от подключения

Поскольку я должен поддерживать .Net 2.0, переход на WCF не является вариантом.

Любые идеи о том, что я могу сделать?

Вот как настроить канал:

Hashtable^ dict = gcnew Hashtable(); 
dict["port"] = 9085; 
dict["authenticationMode"] = "IdentifyCallers"; 
dict["impersonate"] = nullptr; 
dict["secure"] = true; 
dict["typeFilterLevel"] = "Full"; 

TcpServerChannel^ tcpChannel; 
try 
{ 
    tcpChannel = gcnew TcpServerChannel(dict, nullptr); 
} 
catch (Exception^ e) 
{ 
} 

try 
{ 
    ChannelServices::RegisterChannel(tcpChannel, true); 
} 
catch (RemotingException^ RemoteException) 
{ 
    return FALSE; 
} 
catch (Exception^ e) { } 

MyServiceProxy^ proxy = gcnew MyServiceProxy(m_pService); 
RemotingServices::Marshal(proxy,"ServiceProxy"); 

Вот как я подключиться к этой службе с помощью C#

IDictionary dict = new Hashtable(); 
    dict["port"] = 9085; 
    dict["name"] = "127.0.0.1"; 
    dict["secure"] = true; 
    dict["tokenImpersonationLevel"] = "Impersonation"; 
    dict["typeFilterLevel"] = "Full"; 
    dict["connectionTimeout"] = 10000; // 10 seconds timeout 
    workChannel = new TcpClientChannel(dict, null); 
    try 
    { 
     ChannelServices.RegisterChannel(workChannel, true); 
    } 
    catch (System.Exception /*e*/) 
    { 
    } 
    string objectPath = "tcp://127.0.0.1:9085/ServiceProxy"; 
    obj = (IMyService)Activator.GetObject(typeof(IMyService), objectPath); 

Я имею в виду, когда компьютеры изменения IP-адреса. Итак, вот поток. Запустите службу, которая устанавливает канал, затем закройте крышку ноутбука, вернитесь домой, снова откройте его, получите новый IP-адрес, теперь, когда я пытаюсь запустить клиент, и он не может подключиться к службе.

+0

.Net 2.0 более 10 лет, но у нас все еще есть клиенты, работающие на сервере 2003. – Iunknown

+0

Некоторое уточнение о том, что «до изменения IP-адреса» означает, может быть полезно ... На самом деле нет никакого другого места, такого как 127.0.0.1 - не знаю, почему вы пытаетесь изменить это во что-то еще. –

+0

Извините. Я имею в виду IP-адрес компьютеров. Итак, вот поток. Запустите службу, которая устанавливает канал, затем они закрывают крышку ноутбука, возвращаются домой, снова открывают его обратно, получают новую IP-аддонов, теперь клиент больше не может подключать сервисный канал. – Iunknown

ответ

1

После небольшого исследования я столкнулся с параметром «bindTo» ... и все, что мне нужно было сделать, это добавить параметр в словарь TCPServerChannel.

dict["bindTo"]= "127.0.0.1"; 

Если это не сработало, я буду стараться, используя IPCServerChannel, но к счастью это одна линия все, что мне нужно.

И подумать, эта одна линия вызвала столько горя.

Спасибо, Алексей за помощь.