Мне нужна помощь в решении проблемы, с которой я сталкиваюсь при связи клиента рабочего стола со службой WCF, размещенной на IIS.
Что я пытаюсь сделать в моем тестовом примере:
- На сервере размещена служба WSDualHttpBinding
- Клиент устанавливает для этого соединение (метод регистрации вызовов), предоставляя свой обратный вызов URI, который содержит IP-адрес клиента
- Как только соединение установлено, клиентское приложение запускает веб-страницу. Пользователь вводит некоторый текст в текстовое поле и нажимает кнопку Отправить. Веб-страница отправляет текст всем зарегистрированным настольным клиентам.
Проблема:
На шаге 2 ПК может иметь несколько IP-адресов (адаптер Ethernet, адаптеры обратной связи и т. Д.). Если во время регистрационного вызова IP-адрес из этого списка отправляется в URL-адресе обратного вызова, который не может быть вызван с сервера (например, IP-адрес адаптера обратной связи), возникает исключение тайм-аута. После нескольких таких попыток сервер больше не может принимать звонки от клиентов (будь то действительный IP-адрес или нет). Иногда выдается исключение «сервер слишком занят».
(Я не могу использовать полное имя компьютера в URI обратного вызова из-за проблем конфигурации DNS / WINS, из-за которых сервер не может преобразовать имя компьютера в правильный IP-адрес).
Как воспроизвести:
а. Опубликуйте сервер на IIS. Запустите клиент с другого компьютера с несколькими IP-адресами. Клиент генерирует исключения тайм-аута и программа завершается после 3 попыток
б. Параметр в App.Config позволяет ввести правильный IP-адрес (IP-адрес для использования). Теперь, если программа запущена, все работает нормально.
с. Если я удалю указанный выше IP-адрес, чтобы использовать неверный IP-адрес, снова произойдет шаг a. Запустите программы 2-3 раза в этом режиме.
д. Внесите изменения, как на шаге b, и запустите программу. Иногда я получаю исключение тайм-аута. В других случаях веб-сайт появляется. Однако, когда текст вводится и отправляется, он не приходит к клиенту. (Метод регистрации работал, хотя веб-служба не получала никаких вызовов. Функция отправки не выполняется, поскольку в веб-службе нет зарегистрированных клиентов.
Я не уверен, почему именно это происходит и как с этим справиться. Вот мое решение Visual Studio - http://bit.ly/atKfOS
Высоко ценю любые материалы, комментарии.
Среда: Сервер - Windows XP (IIS 5), Windows Server 2008 SP2 x64 (IIS 7), Клиент: Windows XP
Спасибо
GC