我所开发的应用程序集都访问我们拥有的大约 8 个相同的 Web 服务。这些服务和应用程序都位于同一个框中,并且在尝试连接到 Web 服务时都使用计算机名称。
例如:
如果我有一个名为 MapDataService 的 Web 服务,并且有一个访问该服务的应用程序,它将通过以下 URL 访问它:http://计算机名称/MapDataService/MapDataService.asmx。
这在大多数访问 Web 服务的应用程序上都有效。但是,我们有几个应用程序在 URL 中使用计算机名称时,不会从服务获取返回的数据(实际上返回了 503)。为了使其正常工作,需要使用系统的 IP 地址代替 COMPUTERNAME。
这让我感到非常奇怪,因为正如我之前提到的,所有应用程序和服务都在同一个盒子里,并且大多数其他应用程序都使用 COMPUTERNAME 而没有任何问题。
有人能告诉我是什么原因造成的吗?我们无法访问 IIS 日志,而且我们获得的日志(这是在客户网站上的)不是很有用。
答案1
我同意 BillN 的观点。
AWinters,503 错误应该仅在“由于服务器暂时过载或维护,服务器当前无法处理请求”时由服务器发送给客户端。(http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html)可能是当服务器没有响应(在一定时间内)时,您的客户端会错误地报告此情况。
尝试从无法连接到 Web 服务的客户端执行 PING COMPUTERNAME。假设服务器通常响应 Ping,这将告诉您 DNS 是否正常工作。
您可以手动将服务器的 COMPUTERNAME 输入到客户端的 HOSTS 文件中,看看是否有帮助,但如果有帮助,则存在其他 DNS 问题,编辑 HOSTS 只是权宜之计。如果可能,请解决真正的问题。
根据我们掌握的有限信息,服务器有时确实可能暂时超载。但如果使用 COMPUTERNAME 时总是收到 503 错误,而使用 IP 地址时从未收到该错误,那么情况可能并非如此。
答案2
所有应用程序都在同一系统上运行吗?听起来有些应用程序没有将主机名解析为 IP 地址,所以你必须替它们解析。我会查看 DNS/主机文件问题。
答案3
您说有多个应用程序无法访问 computername 的 Web 服务。其他应用程序可以访问 computername 的 Web 服务吗?您可以使用浏览器手动访问吗?
如果某些应用程序针对一个 Web 服务运行,而其他应用程序不能针对同一个 Web 服务运行,那么我认为客户端应用程序中的内部设置存在问题(连接字符串等)。
如果所有应用程序都针对特定的 Web 服务,那么我会查看您是否使用了主机标头或可能阻止特定 DNS 名称的内容。或者应用程序的配置是否使用了正确的身份验证等。