1

我在同一个 Windows 2003 开发服务器上托管了一个 Web 应用程序和一个 WCF 服务。它们每个都有自己的 IIS 网站节点,分别响应 drs.displayscreen.web 和 drs.displayscreen.service 主机头。hosts 文件包含两个指向 127.0.0.1 的标头的条目。该网站有一个对 drs.displayscreen.service 的服务引用。

当它们的应用程序池使用“网络服务”帐户时,这两个应用程序都能完美运行。

我需要在服务的后台执行一些 COM 处理,因此我想以自定义身份运行应用程序。两个站点都在一个新的应用程序池上运行。

当我更改应用程序池标识以使用为此目的创建的新 Windows 帐户时,我收到以下(内部)异常: [EndpointNotFoundException: Could not connect to http://drs.displayscreen.service/Handler.svc。TCP错误码10060:连接尝试失败,因为连接方在一段时间后没有正确响应,或者连接失败,因为连接的主机没有响应192.168.98.2:8080。]

192.168.98.2:8080 是不再使用的 DNS 服务器的地址。解决方案中的任何地方都没有引用它。ipconfig 根本没有引用它。

我已确保新帐户是 IIS_WPG 的成员,并且我已运行 aspnet_regiis -ga 。我还明确授予该帐户读取主机文件的权限。

为什么应用程序尝试使用失效的 DNS 服务器来解析临时 url (drs.displayscreen.service) 而不是主机文件条目?它必须是某种权限,因为它在网络服务帐户下运行时没有这个问题。帮助!!

4

1 回答 1

1

好吧,看来答案可能涉及 .Net 框架中的错误。我发现一篇博客文章让我了解到 SocketCache.GetSocket 的 MS .Net 实现可能会缓存无效的套接字,而另一个则以显式不使用代理配置设置的形式提出解决方法/黑客攻击.

在出现此问题的环境中,我们实际上并未使用代理服务器,但似乎 SocketCache.GetSocket 在设置了不使用代理设置时被覆盖或行为不同。奇怪的是,删除设置会导致问题再次出现,因此很明显,当发现并成功使用有效的 ip/主机名时,SocketCache 并未修复。根据上面提到的第一篇文章的作者所说,该错误在 Mono 中不存在。:)

于 2009-02-19T12:37:22.753 回答