在我的WCF服务中,我需要在Bonjour服务中发布它。这样做的原因是为了让使用我的服务的客户知道它正在运行哪台计算机。
这样做效果很好。但是当我的机器在HostName中有特殊字符时,这项服务的客户不能吃东西,因为在解析url时出现了及时的错误。
示例:"http://máchine:8888/service.svc“
一种解决方案是在这里使用思维来解决机器的IP而不是主机名。但是当计算机只使用IPv6时,我不能发布服务,因为发生了以下错误:"Inalid URI: Invalid port specified“。
如何在不更改HostName的情况下解决此问题?
发布于 2013-06-13 05:21:19
根据我的经验,在将zeroconf服务映射到URL时,最好不要依赖服务的主机名。将服务解析为IP地址(例如,使用avahi,使用avahi_service_resolver_new),并在avahi_service_resolver_new中使用该IP地址。这避免了花哨的主机名和不能解析zeroconf名称的系统解析器出现的各种问题(在嵌入式系统上通常是这种情况)。
如果您收到类似"Inalid URI: Invalid port specified.“的错误,听起来您可能只是忽略了将IP地址括在方括号中。形成URL的伪代码应该是:
if IP address contains ":"
url = "http://[" + ip address + "]:port/whatever"
else
url = "http://" + ip address + ":port/whatever"还有两个额外的复杂情况:
%字符和接口名称附加到中的地址。一些超文本传输协议客户端允许对标准进行明显的扩展,以支持作用域地址,但其他客户端不支持(例如,所有主要的web浏览器都不支持!)。
https://stackoverflow.com/questions/17075168
复制相似问题