使用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:无法分析主机名。
以前有人遇到过同样的问题吗?提前谢谢。
解析器可能不知道如何使用国际化域名(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");
请查看此处以获取进一步的参考。