6

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

例如

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

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

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

以前有人遇到过同样的问题吗?先感谢您。

4

4 回答 4

4

解析器可能不知道如何使用国际化域名(IDN)。如果你想拥有这样的主机名,你将不得不自己进行 Punycode 编码。我没用过,但是有一个核心函数IdnMapping.GetAscii看起来很合适——比如

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

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

于 2013-02-20T14:34:41.980 回答
2

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

因此,一旦您针对 .net 4.5 编译应用程序,此异常就会消失

于 2013-02-20T18:41:32.767 回答
1

正如建议的那样,您必须在使用这种 URI 之前启用 IRI 和 IDN 解析。

将此添加到您的 app.config 中:

 <configuration>
     <uri>
         <idn enabled="All" />
         <iriParsing enabled="true" />
     </uri>
 </configuration>
于 2013-02-20T14:50:24.663 回答
-2

尝试使用

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

在这里寻找进一步的参考。

于 2013-02-20T14:30:46.517 回答