我正在尝试创建类EndpointAddress的实例,其中参数包含德语变音符号。
例如:
EndpointAddress endpointAddress = new EndpointAddress("net.tcp://süd:8001/EmployeeService");
它总是抛出异常,因为uri无法被解析。我试图用编码值替换变音符号,但我得到了相同的异常:
无效的URI:无法解析主机名。
之前有没有人遇到过同样的问题? 提前谢谢。
答案 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以获取进一步的参考。