2013-06-12 2 views
1

내 WCF 서비스에서 Bonjour 서비스에 게시해야합니다. 그 이유는 내 서비스를 사용하는 고객이 실행중인 컴퓨터를 알 수 있도록하기 위해서입니다.특수 Caracteres가있는 호스트 이름

잘 작동합니다. 그러나 HostName에 특수 문자가있는 기계를 사용하면 url을 해결할 시간에 오류가 발생하기 때문에이 서비스의 고객은 먹을 수 없습니다.

예 : "HTTP : // 기계 : 8888/service.svc"

하나의 솔루션은 호스트 이름 대신에 여기에 기계의 IP를 해결하기 위해 생각 사용하는 것입니다. 그러나 컴퓨터가 IPv6에서만 작동하는 경우 "Inalid 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

제 경험에 따르면 URL에 zeroconf 서비스를 매핑 할 때 서비스의 호스트 이름에 의존하지 않는 것이 가장 좋습니다. 서비스를 IP 주소 (예 : avahi_service_resolver_new을 사용하여 avahi로 해결)로 해결하고 URL에 IP 주소를 사용하십시오. 이것은 zeroconf 이름 (종종 임베디드 시스템의 경우)을 해결할 수없는 멋진 호스트 네임과 시스템 해석기로 모든 종류의 문제를 피한다.

"Inalid URI : 잘못된 포트가 지정되었습니다."와 같은 오류가 발생하면 IP 주소를 [대괄호]로 묶지 않은 것처럼 들릴 수 있습니다. URL을 형성하는 의사가 있어야한다 : 두 개의 추가 합병증이있다

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

: 인증서의 일반 이름이 일치하지 않기 때문에

  • 당신이 HTTPS를 사용하는 경우, 인증서 매칭은 아마 실패 할 것이다 . 일반적으로 자동 검색 서비스의 본질은 서버를 의미있게 인증 할 수 없다는 것을 의미하기 때문에 일반적으로 어떻게해야할지 명확하지 않습니다. 따라서 HTTP 클라이언트에서 인증서 확인을 끄는 것으로 벗어날 수 있습니다.
  • URL 구문에 대한 표준 (RFC)이 부족하여 URL의 주소에 % 문자 및 인터페이스 이름을 연결할 수 없기 때문에 IPv6 링크 로컬 주소를 사용할 수 없습니다. 일부 HTTP 클라이언트는 표준에 명시 적으로 확장하여 범위가 지정된 주소를 지원할 수 있지만 다른 일부는 그렇지 않습니다 (예 : 모든 주요 웹 브라우저는 그렇지 않음).
+0

팁 주셔서 감사. ;) – ECC