WCF无法建立连接,因为目标计算机主动拒绝

时间:2011-05-12 15:22:21

标签: wcf wcf-security

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

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

一切都好。但是当我尝试使用内部IP 192.x.x.x时,我收到错误:

  

无法建立连接,因为目标计算机主动拒绝它

知道可能导致这种情况的原因吗?

祝福

PS:我在WCF上禁用了身份验证。甚至关闭防火墙......没有工作......

6 个答案:

答案 0 :(得分:6)

您是否在客户端和服务器上都使用192.x.x.x?我记得在一段时间内看到一个问题,对于TCP,需要匹配的客户端和服务器名称(与其中一个消息属性相关的东西),所以如果用“localhost”定义服务,那么客户端就会出现问题

答案 1 :(得分:6)

好吧,当我忘记安装必要的组件时,我收到此错误消息。请参阅链接Configuring WCF Service with netTcpBinding

(步骤摘要)......

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

答案 2 :(得分:4)

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

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

  1. 应用程序池已启动并且看起来正确(.NET 4 etc / security)
  2. 对于NET.TCP,请确保正确配置网站/应用程序中的“允许的协议”(通过高级设置):例如HTTP,的net.tcp
  3. 对于非IIS托管服务,您可能需要配置命名空间保留(URLACL)。 http://msdn.microsoft.com/en-us/library/ms733768.aspx

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

答案 3 :(得分:1)

如果您在调试模式下从visual studio中运行,请确保您的解决方案端口号匹配。我已经看过几个实例,其中我有属性&gt; Web&gt;自动分配端口 - 已选中,端点来自(在本例中为我的silverlight应用程序)与自动生成的端口不匹配。我通常在.web中将端口更改为1318。

答案 4 :(得分:1)

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

import React from "react";
import { render, fireEvent } from "@testing-library/react";

import { useHistory } from "react-router-dom";
const mockHistoryPush = jest.fn();

const App: React.FC = () => {
  const history = useHistory();
  const onClick = () => {
    history.push("/anotherPath");
  };
  return (
    <div>
      <button onClick={onClick}>click</button>
    </div>
  );
};
jest.mock("react-router-dom", () => ({
  useHistory: () => ({
    push: mockHistoryPush
  })
}));

test("renders learn react link", async () => {
  const { getByText } = render(<App />);
  fireEvent.click(getByText("click"));
  expect(mockHistoryPush).toBeCalledWith("/anotherPath");
});

或者运行Fiddler,它将在127.0.0.1处进行WCF调用,然后将其转发。

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

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

答案 5 :(得分:0)

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

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