【问题标题】:WCF No connection could be made because the target machine actively refusedWCF 无法建立连接,因为目标计算机主动拒绝
【发布时间】:2011-05-12 15:22:20
【问题描述】:

我刚刚使用net.tcp 实现了一个简单的 WCF 服务器。

首先,我使用127.0.0.1作为服务器地址,客户端可以连接WCF服务。

一切正常。但是当我尝试使用内部 IP 192.x.x.x 时出现错误:

由于目标机器主动拒绝,无法建立连接

知道是什么原因造成的吗?

最好的祝福

PS:我在 WCF 上禁用了身份验证。连防火墙都关了……没用……

【问题讨论】:

  • 你能分享一下异常堆栈吗?

标签: wcf wcf-security


【解决方案1】:

好吧,当我忘记安装必要的组件时,我收到了这个错误消息。见链接Configuring WCF Service with netTcpBinding

(步骤摘要)...

  • 转到“程序和功能”(通常在控制面板中)
  • 转到“打开或关闭 Windows 功能”
  • (假设 VS2012)转到“.NET Framework 4.5 高级服务”->“WCF 服务”
  • 启用“TCP 激活”

【讨论】:

  • 嗨@barrypicker:我已经按照你的说法在我的登台服务器上完成了所有设置,但我仍然遇到同样的错误,你能指导我吗??
  • @TheProgrammer - 验证临时服务器上的防火墙限制。验证 carlosfigueira、PeterX 和 Moby Stunt Double 之前的答案。验证包括端口的 URL。另外,请尝试使用 Fiddler 等工具连接到该服务,以验证 WCF 服务是否可用。
【解决方案2】:

您在客户端和服务器上都使用 192.x.x.x 吗?我记得不久前看到一个问题,其中对于 TCP,客户端和服务器名称需要匹配(与消息属性之一相关),因此如果您使用“localhost”定义服务并使用 <machine name> 定义客户端会有是个问题。

【讨论】:

  • 是的...你是对的。本地 IP 表示应在两侧匹配...谢谢
  • 你的意思是“如果你用 'localhost' 定义服务,用 192.x.x.x 定义客户端”?
【解决方案3】:

如果逻辑地址相同并且服务器端点配置了“listenUri”并且客户端行为配置为使用<clientVia> 地址,则物理客户端和服务地址可能不同。在我们的例子中,这是我们的代理/防火墙配置所必需的。实际上,客户端调用防火墙,服务器在本地侦听转发的请求。

对于 IIS 托管服务,请检查以下内容:

  1. 应用程序池已启动并且看起来正确(.NET 4 etc/security)
  2. 对于 NET.TCP,确保正确配置网站/应用程序中的“允许的协议”(通过高级设置):例如http,net.tcp

对于非 IIS 托管服务,您可能需要配置命名空间预留 (URLACL)。 http://msdn.microsoft.com/en-us/library/ms733768.aspx

还要确保相应的 Windows 服务正在运行,例如Net.Tcp 监听器。

【讨论】:

  • "同时确保适当的 Windows 服务正在运行,例如 Net.Tcp 监听器。"如果我有任何头发,现在它已经被撕掉了。谢谢你让我摆脱痛苦!
【解决方案4】:

如果您在 Visual Studio 中以调试模式运行,请确保您的解决方案端口号匹配。我已经看到了几个实例,其中我选择了 Properties>Web>Auto-Assign Port - 并且端点来自,在这种情况下,我的 silverlight 应用程序与自动生成的端口不匹配。我通常在我的 .web 中将端口更改为 1318。

【讨论】:

    【解决方案5】:

    今天我发现如果你的 WCF 服务类中有循环引用,也会出现这个错误。我有一个无限调用自身并导致此错误消息的方法,这导致我来到这里。

    因此,如果其他建议都不起作用,请检查您的代码以查看您是否正在执行任何递归功能,并确保您没有陷入无限循环。

    【讨论】:

      【解决方案6】:

      我通过在应用程序配置中注释此设置解决了这个问题:

      <defaultProxy>
            <proxy bypassonlocal="False" usesystemdefault="True" proxyaddress="http://127.0.0.1:8888" />
          </defaultProxy>
      

      或者,运行 Fiddler,它将在 127.0.0.1 接收 WCF 调用,然后转发它。

      完整的情况是,我在对其中一项服务进行 WCF 调用时遇到了同样的问题。调用将失败,并显示顶级错误消息“http://LinuxIP:Port/... 上没有端点监听”,服务跟踪查看器日志显示内部异常为“无法连接,因为目标机器主动拒绝 127.0.0.1:8888 ”。

      原因是我把这个配置放在我的应用程序中以捕获 Fiddler 中的传出流量。如果此配置到位,则需要为 WCF 调用运行 Fiddler 以使其到达预期目标。如果 Fiddler 未运行,则会出现此错误。在这种情况下注释此设置,WCF 调用将转到目的地。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-07-21
        • 1970-01-01
        • 1970-01-01
        • 2016-12-04
        • 1970-01-01
        • 1970-01-01
        • 2011-08-24
        • 2020-10-07
        相关资源
        最近更新 更多