【发布时间】:2011-09-02 11:48:22
【问题描述】:
我能够从控制台或在 VS 开发服务器上运行的网站/Web 应用程序成功连接到远程 WCF 服务。但是,当我尝试从 IIS 托管网站连接时,出现以下错误。有什么想法吗?
无法建立连接,因为目标机器主动拒绝它 12.11.121.12:80
【问题讨论】:
我能够从控制台或在 VS 开发服务器上运行的网站/Web 应用程序成功连接到远程 WCF 服务。但是,当我尝试从 IIS 托管网站连接时,出现以下错误。有什么想法吗?
无法建立连接,因为目标机器主动拒绝它 12.11.121.12:80
【问题讨论】:
这个错误:
由于目标机器主动拒绝,无法建立连接
表示连接请求成功通过给定端口上的目标计算机(这不是防火墙问题),并且目标计算机没有侦听该端口上的传入连接,因此操作系统拒绝了连接尝试.
您的错误的其余部分标识了尝试连接的计算机 12.11.121.12 和端口号 80。
该错误表明服务器未在目标计算机上运行。如果您知道服务器正在您尝试连接的机器上运行,因为您可以从另一个应用程序连接到它,那么这表明您的连接详细信息在网站中配置错误。
所以,有一些事情要检查:
someserver.org 而不是12.11.121.12,并且由于一台服务器面向外部而另一台面向内部,因此它被解析为不同的 IP?【讨论】:
这听起来很像权限(身份验证问题),因为默认情况下应用程序池在不同的用户(机器)下运行。由于 WCF 使用身份验证令牌,我敢打赌这是您的问题。尝试将池的身份设置为与控制台相同的用户,我敢打赌它会正常工作。
【讨论】:
奇怪的是,当 web 应用程序的 useDefaultWebProxy 为“真”时,我收到了这个错误,但完全相同的代码和设置在单元测试类中运行良好。
事实证明,Web 应用正在使用 https://foo/bar:1234 的 Web 浏览器代理(公司策略)。当我明确地使用:
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name=...
useDefaultWebProxy="false" proxyAddress="https://foo/bar:1234"
...
我得到了错误:
ServicePointManager 不支持使用 https 方案的代理
于是我把代理地址改成了http,而不是https,就成功了。
【讨论】: