Еще один вопрос по WCF
От: SanyaVB  
Дата: 04.02.15 15:13
Оценка:
Есть роутер — у него есть реальный IP (допустим 213.180.193.11 ), но нет доменного имени.
Есть компьютер подключенный к этому роутеру и допустим у него имя Computer и ip 192.168.0.199
Допустим у роутера прокинут порт 80 на компьютер Computer.

Как я должен настроить службу, которая запускается из консольного приложения, чтобы можно до неё достучаться например из интернета скажем так схематично по адресу http://213.180.193.11:80 ???

Набросок кода такой:
Служба
using (ServiceHost managerHost = new ServiceHost(typeof(Manager), new Uri("http://192.168.0.199:80")))
{
   managerHost.AddServiceEndpoint(typeof(IManagerContract), GetHttpBinding(), string.Empty);
   while (Console.ReadKey(true).Key != ConsoleKey.Escape) ;
}

//................

private static WSDualHttpBinding GetHttpBinding()
{
     WSDualHttpBinding binding = new WSDualHttpBinding(WSDualHttpSecurityMode.None);
     binding.Security.Message.ClientCredentialType = MessageCredentialType.None;
     return binding;
}


Клиент
     Client client = new Client(new InstanceContext(new Test()), GetHttpBinding(), new EndpointAddress(new Uri("http://213.180.193.11:80")));
     client.Test();

//................

    class Client : DuplexClientBase<IManagerContract>, IManagerContract
    {
        public Client(InstanceContext callbackInstance, Binding binding, EndpointAddress remoteAddress) 
            : base(callbackInstance, binding, remoteAddress) { }

        public void Test()
        {
            return base.Channel.Test();
        }      
    }

private static WSDualHttpBinding GetHttpBinding()
{
     WSDualHttpBinding binding = new WSDualHttpBinding(WSDualHttpSecurityMode.None);
     binding.Security.Message.ClientCredentialType = MessageCredentialType.None;
     return binding;
}

такой код не прокатывает. Клиент сразу же ругется кодом 417 Он видимо очень хочет чтобы за место http://213.180.193.11:80 было http://Computer:80 Но доменного имени у реального IP нет. Как тут быть, если не прибегать к файлу C:\Windows\System32\drivers\etc\hosts?
Почему WCF предпочитает в URI имя компьютера нежели его IP? И как его заставить понимать IP если это возможно?

Помогите пожалуйста, хочу разобраться с этим начальным этапом проектирования серверной-клиентской части!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.