Здравствуйте, SanyaVB, Вы писали:
SVB>Почему WCF предпочитает в URI имя компьютера нежели его IP? И как его заставить понимать IP если это возможно?
WCF прекрасно работает с IP адресами (по крайней мере с IPv4 — для IPv6 мне просто не довелось попробовать).
Проблема в чем-то другом.
Я все же настоятельно прошу приводить полный текст ошибки, которую вы получаете. Искать описание по коду нет никакого желания
Здравствуйте, pugv, Вы писали:
P>Ну... Для начала посмотрите InnerException, если есть возможность сервер под отладчиком запустить. P>А так, опять же анализируйте трафик, браузер очевидно шлёт обычный GET-запрос, а вот клиент... P>Смотрите конфиги сервера (эндпойнты и байндинги).
Кстати тупо убрал дуплекс. т.е. за место WSDualHttpBinding взял WSHttpBinding и заработало!
Видимо дуплекс (напишу примитивным языком) получается таким способом. Клиент автоматически создает эндпоинт и отправляет его серверу, а именно как я понимаю вот такой http://sanyavb/Temporary_Listen_Addresses/a22db036-5546-4b9e-aab6-f87957950e69/5100491e-a437-4bad-9dbc-11791eaf4be4
А сервер не может подключиться к клиенту по этому эндпоинту, т.к. машина клиента не видна со стороны сервера. в итоге возникает исключение.
Если две машины друг друга видят, то WSDualHttpBinding работает нормально — проверял!
Есть роутер — у него есть реальный 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;
}
такой код не прокатывает. Клиент сразу же ругется кодом 417 Он видимо очень хочет чтобы за место http://213.180.193.11:80 было http://Computer:80 Но доменного имени у реального IP нет. Как тут быть, если не прибегать к файлу C:\Windows\System32\drivers\etc\hosts?
Почему WCF предпочитает в URI имя компьютера нежели его IP? И как его заставить понимать IP если это возможно?
Помогите пожалуйста, хочу разобраться с этим начальным этапом проектирования серверной-клиентской части!
Здравствуйте, Klikujiskaaan, Вы писали:
K>Здравствуйте, SanyaVB, Вы писали:
K>Настроить роутер так, что бы на запрос по восьмедисятому порту он редиректил на нужный айпишник
Это все уже было сделано (забыл написать)
Здравствуйте, Михаил Романов, Вы писали:
МР>Здравствуйте, SanyaVB, Вы писали:
SVB>>Почему WCF предпочитает в URI имя компьютера нежели его IP? И как его заставить понимать IP если это возможно? МР>WCF прекрасно работает с IP адресами (по крайней мере с IPv4 — для IPv6 мне просто не довелось попробовать). МР>Проблема в чем-то другом.
МР>Я все же настоятельно прошу приводить полный текст ошибки, которую вы получаете. Искать описание по коду нет никакого желания
Михаил, ошибка такая на клиенте(причем без задержек моментально происходит): Удаленный сервер вернул неожиданный ответ: (417) Expectation Faild.
Удаленный сервер возвратил ошибку: (417) Expectation Faild.
на сервере в логах нет ни одного упоминания что была попытка подключения.
КСТАТИ ЕСЛИ СЕРВЕР НЕ ВКЛЮЧАТЬ, ТО КЛИЕНТ ПО ПРЕЖНЕМУ ВОЗВРАЩАЕТ ТАКУЮ ЖЕ ОШИБКУ!!! клиент выходит через прокси.
поднял IIS на серверной машине. клиенская машина на сайт по умолчанию заходит через браузер. т.е. связь есть
исходный код я привел выше. там только адреса выдуманные
Здравствуйте, pugv, Вы писали:
P>Здравствуйте, SanyaVB, Вы писали:
SVB>> клиент выходит через прокси.
P>Заголовок "Expect: 100-Continue" в запросе имеется? Если да, убрать можно так:
P>
Не помогло
Ошибка (приведу ниже) возникает без задержек одна и та же при включенной службе и при выключенной:
Получен неправильный HTTP
Удаленный сервер вернул неожиданный ответ: (405) Method Not Allowed.
Удаленный сервер вернул возвратил ошибку: (405) Недопустимый метод.
Мысли вслух, возможно абсолютно не верные: если не ошибаюсь, в заголовок HTTP можно указывать не обязательную информацию о хосте, а именно имя хоста. делается это для того чтобы можно к одному IP привязать множество доменных имен. Для точного определения до какой именно службы нужно стучаться в этот заголовок клиент пишет имя хоста. Может быть WCF по умолчанию такую штуку делает?
Здравствуйте, SanyaVB, Вы писали:
SVB>Ошибка (приведу ниже) возникает без задержек одна и та же при включенной службе и при выключенной
Правильно, потому что до вашей службы запрос и не доходит, её прокси возвращает.
SVB> (405) Method Not Allowed.
Смотрите фиддлером, все увидите — кто вам возвращает 405, какой метод в вашем запросе, какие методы допустимы (стандарт обязывает в ответе 405 возвращать список Allowed).
Здравствуйте, pugv, Вы писали:
P>Здравствуйте, SanyaVB, Вы писали:
SVB>>Ошибка (приведу ниже) возникает без задержек одна и та же при включенной службе и при выключенной
P>Правильно, потому что до вашей службы запрос и не доходит, её прокси возвращает.
SVB>> (405) Method Not Allowed.
P>Смотрите фиддлером, все увидите — кто вам возвращает 405, какой метод в вашем запросе, какие методы допустимы (стандарт обязывает в ответе 405 возвращать список Allowed).
Т.е. мне надо поставить прокси (фидлер) и настроить его на прокси фирмы, раз мы через неё выходим в интернет. Верно я понял?
Здравствуйте, SanyaVB, Вы писали:
SVB>Т.е. мне надо поставить прокси (фидлер) и настроить его на прокси фирмы, раз мы через неё выходим в интернет. Верно я понял?
Ну да, поставьте на клиенте фиддлер и проанализируйте соответствующие запросы и ответы.
Здравствуйте, pugv, Вы писали: P>Смотрите фиддлером, все увидите — кто вам возвращает 405, какой метод в вашем запросе, какие методы допустимы (стандарт обязывает в ответе 405 возвращать список Allowed).
Ура! Дебагер помог (проблема была в 100-Continue). я смог достучаться до сервера. если захожу через браузер мне возращается страница WCF — по умолчанию. Но через клиент я не могу связаться и по тайматуту клиент завершает работу. Однако в логах сервера я вижу как клиент до него стучится 5 раз! Но серверу его стуки не нравятся и вот что он пишет:
Ну... Для начала посмотрите InnerException, если есть возможность сервер под отладчиком запустить.
А так, опять же анализируйте трафик, браузер очевидно шлёт обычный GET-запрос, а вот клиент...
Смотрите конфиги сервера (эндпойнты и байндинги).
Здравствуйте, pugv, Вы писали:
P>Ну... Для начала посмотрите InnerException, если есть возможность сервер под отладчиком запустить. P>А так, опять же анализируйте трафик, браузер очевидно шлёт обычный GET-запрос, а вот клиент... P>Смотрите конфиги сервера (эндпойнты и байндинги).
1) InnerException нет.
2) лог сервера идентичен вот такому