使用net.tcp的EndpointAddress中的德语元音变音符

本文关键字:音符 德语 net tcp EndpointAddress 使用 | 更新日期: 2023-09-27 18:00:13

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

例如

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

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

无效URI:无法分析主机名。

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

使用net.tcp的EndpointAddress中的德语元音变音符

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

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

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

只是一个额外的注释。WCF在.Net 4.5中添加了对IDN的支持(两者都用于托管服务+WCF客户端与具有IDN名称的服务对话)。本文档提供了一些相关信息。

因此,一旦你根据.net 4.5 编译应用程序,这个异常就会消失

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

将此添加到你的app.config:

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

尝试使用

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

请查看此处以获取进一步的参考。