在我的WCF服务中,我需要在Bonjour服务中发布它。这样做的原因是让使用我服务的客户知道它正在运行哪台计算机。
这很有效。 但是当我在HostName中使用具有特殊字符的计算机时,此服务的客户无法进食,因为在解析网址时出现错误。
示例:“http://máchine:8888 / service.svc”
一种解决方案是使用思想来解决机器的IP而不是主机名。但是当计算机仅使用IPv6时,我无法发布服务,因为发生以下错误:“Inalid URI:指定了无效的端口。”
如何在不更改HostName的情况下解决此问题?
答案 0 :(得分:1)
根据我的经验,在将zeroconf服务映射到URL时,最好不要依赖服务的主机名。将服务解析为IP地址(例如,使用avahi,使用avahi_service_resolver_new
)并使用URL中的IP地址。这避免了花哨的主机名和无法解析零配置名称的系统解析器的各种问题(通常是嵌入式系统上的情况)。
如果您收到类似“Inalid URI:指定的无效端口”的错误,听起来您可能只是忽略了在[方括号]中包含IP地址。用于形成URL的伪代码应为:
if IP address contains ":"
url = "http://[" + ip address + "]:port/whatever"
else
url = "http://" + ip address + ":port/whatever"
还有两个并发症:
%
字符和接口名称附加到该地址在URL中。有些HTTP客户端允许标准的明显扩展来支持作用域地址,但其他人不支持(例如,所有主要的Web浏览器都没有!)。