首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带有特殊字符的主机名

带有特殊字符的主机名
EN

Stack Overflow用户
提问于 2013-06-13 04:54:11
回答 1查看 403关注 0票数 1

在我的WCF服务中,我需要在Bonjour服务中发布它。这样做的原因是为了让使用我的服务的客户知道它正在运行哪台计算机。

这样做效果很好。但是当我的机器在HostName中有特殊字符时,这项服务的客户不能吃东西,因为在解析url时出现了及时的错误。

示例:"http://máchine:8888/service.svc

一种解决方案是在这里使用思维来解决机器的IP而不是主机名。但是当计算机只使用IPv6时,我不能发布服务,因为发生了以下错误:"Inalid URI: Invalid port specified“。

如何在不更改HostName的情况下解决此问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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的伪代码应该是:

代码语言:javascript
复制
if IP address contains ":"
    url = "http://[" + ip address + "]:port/whatever"
else
    url = "http://" + ip address + ":port/whatever"

还有两个额外的复杂情况:

  • 如果您使用的是HTTPS,证书匹配可能会失败,因为证书上的通用名称不匹配。通常还不清楚该如何处理,因为自动发现的服务的本质通常意味着您无法对服务器进行有意义的身份验证。
  • 你可能不能使用IPv6链接本地地址,因为IPv6语法的标准(RFC)中存在缺陷,这意味着它不可能将%字符和接口名称附加到

中的地址。一些超文本传输协议客户端允许对标准进行明显的扩展,以支持作用域地址,但其他客户端不支持(例如,所有主要的web浏览器都不支持!)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17075168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档