System.Net.Sockets如何在查找WCF服务的上下文中执行DNS查找?

System.Net.Sockets如何在查找WCF服务的上下文中执行DNS查找?,wcf,iis,permissions,dns,application-pool,Wcf,Iis,Permissions,Dns,Application Pool,我有一个Web应用程序和一个WCF服务,托管在同一台Windows2003开发服务器上。它们各自有自己的IIS网站节点,分别响应drs.displayscreen.web和drs.displayscreen.service主机头。hosts文件包含指向127.0.0.1的两个头的条目。该网站具有对drs.displayscreen.service的服务引用 当它们的应用程序池使用“网络服务”帐户时,这两个应用程序都能正常工作 我需要在服务的引擎盖下执行一些COM处理,因此我希望以自定义身份运行应

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

当它们的应用程序池使用“网络服务”帐户时,这两个应用程序都能正常工作

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

当我更改应用程序池标识以使用为此目的创建的新windows帐户时,会出现以下(内部)异常: [EndpointNotFoundException:无法连接到。TCP错误代码10060:连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立的连接失败,因为连接的主机未能响应192.168.98.2:8080。]

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

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


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

好吧,看来答案可能涉及到.Net framework中的一个bug。我发现SocketCache.GetSocket的MS.Net实现可能会缓存无效的套接字,这表明存在一种以显式的“不使用代理”配置设置为形式的变通/破解方法


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

好吧,看来答案可能涉及到.Net framework中的一个bug。我发现SocketCache.GetSocket的MS.Net实现可能会缓存无效的套接字,这表明存在一种以显式的“不使用代理”配置设置为形式的变通/破解方法


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

如果您发现这是一个bug,请在发布bug报告。如果您发现这是一个bug,请在发布bug报告。