2013-06-12 5 views
1

В моем сервисе WCF мне нужно опубликовать его в службе Bonjour. Причина этого заключается в том, чтобы клиенты, которые потребляют мой сервис, знают, на каком компьютере он работает.Имя хоста со специальными авариями

Это хорошо работает. Но когда у меня есть машины со специальными символами в HostName, клиенты этой службы не могут есть, потому что во время устранения ошибки возникает ошибка.

Пример: «HTTP: // МАШИНА: 8888/service.svc»

Одно решение было бы использовать думали решить здесь IP машины вместо имени хоста. Но когда компьютер работает только с IPv6, я не могу опубликовать эту службу, потому что возникает следующая ошибка: «Недопустимый URI: неверный порт указан».

Как решить эту проблему без изменения HostName?

+1

Вы ищете «как использовать недопустимое имя хоста в службе WCF» или «как правильно указать [IDN] (http://en.wikipedia.org/wiki/Internationalized_Domain_Names)» или что-то еще? –

+0

Вы пытались выразить свое имя в [punycode] (http://en.wikipedia.org/wiki/Punycode)? См. [IDN] (http://en.wikipedia.org/wiki/Internationalized_domain_name). – McDowell

ответ

1

По моему опыту, при сопоставлении сервисов zeroconf с URL-адресами лучше не полагаться на имя хоста службы. Разрешите услугу на IP-адрес (например, с помощью avahi, используя avahi_service_resolver_new) и используйте IP-адрес в URL-адресе. Это позволяет избежать всех проблем с фантастическими именами хостов и системными преобразователями, которые не могут разрешать имена zeroconf (часто это касается встроенных систем).

Если у вас возникла ошибка, например, «Недопустимый URI: Неверный порт указан». Похоже, вы могли просто отказаться от включения IP-адреса в [квадратные скобки]. Псевдокод для формирования вашего URL должен быть:

if IP address contains ":" 
    url = "http://[" + ip address + "]:port/whatever" 
else 
    url = "http://" + ip address + ":port/whatever" 

Есть два дополнительных осложнения:

  • Если вы используете HTTPS, соответствующий сертификат, вероятно, не потому, что общее имя сертификата не будет соответствовать , Неясно, что делать с этим в целом, потому что сама природа автообнаруженной службы обычно означает, что вы не можете достоверно аутентифицировать сервер в любом случае. Таким образом, вы можете уйти, просто отключив проверку сертификата в своем HTTP-клиенте.
  • Возможно, вам не удастся использовать локальный адрес ссылки IPv6, так как существует дефицит в стандартном (RFC) синтаксисе URL, что означает, что нельзя добавить символ % и имя интерфейса по адресу в URL-адресе. Некоторые HTTP-клиенты допускают очевидное расширение стандарта для поддержки локализованных адресов, но другие нет (например, не все основные веб-браузеры!).
+0

Спасибо за подсказку. ;) – ECC