带有net.tcp的EndpointAddress中的德语变音符号

时间:2013-02-20 14:26:51

标签: c# wcf

我正在尝试创建类EndpointAddress的实例,其中参数包含德语变音符号。

例如

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

它总是抛出异常,因为uri无法被解析。我试图用编码值替换变音符号,但我得到了相同的异常:

  

无效的URI:无法解析主机名。

之前有没有人遇到过同样的问题? 提前谢谢。

4 个答案:

答案 0 :(得分:4)

解析器可能不知道如何使用internationalized domain names(IDN)。如果你想拥有这样的主机名,你将不得不自己做Punycode编码。我没有使用它,但有一个看起来合适的核心功能IdnMapping.GetAscii - 类似于

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

也许会有用(原谅我,如果没有,C#不是我的语言)。

答案 1 :(得分:2)

就像一个额外的说明。 WCF在.Net 4.5中添加了对IDN的支持(包括托管服务+ WCF客户端与IDN名称的服务通信)。这个documentation有一些关于此的信息。

因此,只要您针对.net 4.5

编译应用程序,此异常就会消失

答案 2 :(得分:1)

根据建议,您必须在使用此类URI之前启用IRI和IDN解析。

将此添加到您的app.config:

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

答案 3 :(得分:-2)

尝试使用

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

查看here以获取进一步的参考。