2013-02-20 3 views
6

매개 변수에 독일어 움라우트가 포함 된 EndpointAddress 클래스의 인스턴스를 만들려고합니다. 예를를 들어net.tcp를 사용하는 EndpointAddress의 독일어 움라우트

:

EndpointAddress endpointAddress = new EndpointAddress("net.tcp://süd:8001/EmployeeService"); 

그것은 항상 URI를 구문 분석 할 수 없습니다 주어진 예외가 발생합니다. 움라우트를 인코딩 된 값으로 바꾸려고 시도했지만 동일한 예외가 발생했습니다.

잘못된 URI : 호스트 이름을 파싱하지 못했습니다.

누구든지 이전에 동일한 문제가 있었습니까? 미리 감사드립니다.

+0

변환은 어떻게 생겼습니까? 예외는 무엇을 말합니까? –

+1

'새로운 EndpointAddress ("net.tcp : // süd : 8001/EmployeeService")'.net4.5에서 제대로 작동합니다. 이전 버전을 사용하고 있습니까? – spender

+2

[IRI (국제 리소스 식별자) 구문 분석] (http://msdn.microsoft.com/en-us/library/bb968786.aspx)을 활성화 해 보셨습니까? [] (http://msdn.microsoft.com/en-us/library/bb882600.aspx) [다국어 도메인 이름 (IDN) 구문 분석]을 사용하도록 설정할 수도 있습니다 (http://msdn.microsoft.com/en/ -us/library/bb968786.aspx). [] – dtb

답변

4

파서는 아마도 internationalized domain names (IDN)으로 작업하는 법을 모릅니다. 그런 호스트 이름을 원한다면 Punycode 인코딩을해야 할 것입니다. 나는 그것을 사용하지 않은,하지만 적절한 보이는 핵심 기능 IdnMapping.GetAscii 거기에 뭔가 -

EndpointAddress endpointAddress = new EndpointAddress(
    "net.tcp://" + IdnMapping.GetAscii("süd") + ":8001/EmployeeService" 
); 

처럼 아마 작동합니다 (그렇지 않은 경우에 저를 용서, C#을 내 언어가 아닙니다).

+0

punycode를 사용 중입니다. 나는 그것에 대해 몰랐다. – spender

+0

홉스, 답변 해 주셔서 감사합니다. 이제 다른 문제에 직면하고 있습니다. 나는 그 원인이 같다고 생각한다. 다음으로 DuplexChannelFactory의 인스턴스를 만들려고합니다. 나는 가지고있다 : _factory = 새로운 DuplexChannelFactory (새로운 InstanceContext (callbackImplementation), binding, endpointAddress); _channel = _factory.CreateChannel(); (_channel as ICommunicationObject) .Open(); Open()에서 충돌이 발생합니다.IdnMapping을 사용한 후 net.tcp : // xn - sd-xka : 8001/EmployeeService를 얻습니다. Open()을 실행하면 "xn - sd-xka 호스트에 DNS 항목이 없습니다."라는 메시지와 함께 CommunicationException이 발생합니다. 감사합니다. – Nenad

+0

@Nenad 그건 같은 문제가 아닙니다. 존재하지 않는 호스트에 연결할 수 없습니다. :-피 – hobbs

-2

에 한번 더 참조

string uri = System.Uri.EscapeDataString("net.tcp://süd:8001/EmployeeService"); 

here를 사용합니다.

1

이런 종류의 URI를 사용하기 전에 IRI 및 IDN 구문 분석을 활성화해야합니다.

당신의 app.config이 추가 :

<configuration> 
    <uri> 
     <idn enabled="All" /> 
     <iriParsing enabled="true" /> 
    </uri> 
</configuration> 
2

를 그냥 추가 참고로. WCF는 .Net 4.5에서 IDN (둘 다 호스팅 서비스 + IDN 이름을 사용하는 서비스에 대해 이야기하는 WCF 클라이언트 용)에 대한 지원을 추가했습니다. 이 documentation에 대한 정보가 있습니다.

.net과 비교하여 앱을 컴파일하자마자이 예외가 사라집니다.

관련 문제