WCF net.tcp-目标计算机拒绝连接

本文关键字:拒绝 连接 目标计算机 tcp- net WCF | 更新日期: 2023-09-27 18:28:12

我在Windows 8 x 64和Windows 7 x 64操作系统上遇到此问题。我有一个简单的WCF服务,它使用net.tcp绑定。

我已经阅读了许多文章来编写这个简单的服务,包括MSDN上的以下文章:托管和使用WCF服务

我的服务和配置文件与上面文章中提到的完全一样。

使用InstallUtil.exe作为窗口安装此WCF服务之后服务,我可以看到服务安装正确运行时没有任何错误。我已尝试在OnStart和Windows服务的OnStop方法,没有发现任何错误。一旦我尝试从另一个解决方案引用此端点,我得到以下错误。

无法连接到网络。tcp://localhost:8523/Inbound.连接尝试持续的时间跨度为00:00:00.95 31494。TCP错误代码10061:由于目标计算机积极拒绝127.0.0.1:8523。

我已经在互联网上尝试了大多数与此问题相关的帖子,也尝试过打开防火墙、卸载防病毒软件、尝试不同的端口、在防火墙中为这些端口显式创建入站和出站规则等。但我仍然无法访问承载我基于net.tcp的WCF服务的Windows服务。我的TCP端口共享服务和TCP listner适配器服务已打开,而且我还打开了运行这些TCP服务所需的必要Windows功能。

我可以看到的一件事是,我总是可以在另一个项目的同一解决方案中访问该服务,因为当我尝试引用该服务时,Visual Studio会立即创建一个Wcf服务主机(WcfSvcHost),它会在当前解决方案中的所有项目中找到所有端点并加载它们。只要此主机正在运行,我就可以在另一个解决方案中引用此服务,而不会出现问题。

承载我的服务的Windows服务也与给定的代码相同。很明显,这会创建ServiceHost的实例并运行它。我已经用一些日志验证了这一点,当服务启动时,它会成功执行。但当我的服务启动时,我无法在任务管理器中看到这个进程在运行。当我在同一个解决方案中调试或试图在上面提到的同一解决方案中引用时,当VisualStudio运行它时,我可以看到这个服务。

现在我的问题是,当我的服务启动时,我应该在任务管理器中看到这个WcfSvceHost服务吗?我想我应该。如果我我错了。

我需要向我的Windows服务授予任何特殊权限才能运行此ServiceHost吗?还是问题完全不同?我是不是忽略了一些显而易见的东西?如有任何帮助,我们将不胜感激。谢谢

这是我的配置文件。

<system.serviceModel>
<bindings />
<client />
<services>
  <service name="MyWcfServiceLibrary.WCFService">
    <endpoint address="" binding="netTcpBinding" bindingConfiguration="" name="TCPEndPoint" contract="MyWcfServiceLibrary.IWCFService">
      <identity>
        <dns value="localhost" />
      </identity>
    </endpoint>
    <endpoint address="mex" binding="mexTcpBinding" bindingConfiguration="" name="mexEndPoint" contract="IMetadataExchange" />
    <host>
      <baseAddresses>
        <add baseAddress="net.tcp://127.0.0.1:8523/MyWCFService" />
      </baseAddresses>
    </host>
  </service>
</services>
<behaviors>
  <serviceBehaviors>        
    <behavior name="">
      <serviceMetadata httpGetEnabled="false" httpsGetEnabled="false" />
      <serviceDebug includeExceptionDetailInFaults="false" />
    </behavior>
  </serviceBehaviors>
</behaviors>
</system.serviceModel>

WCF net.tcp-目标计算机拒绝连接

让我们通过消除进行调试。是否启用端口共享?这是为了在多个进程之间共享TCP端口。根据微软的说法,"该服务是作为WCF的一部分安装的,但作为安全预防措施,默认情况下不会启用该服务"。

以下是如何使用MMC 启用Net.TCP端口共享服务

  1. 从"开始"菜单中,打开"服务管理控制台",方法是打开"命令提示符"窗口并键入Services.msc,或者打开"运行"并在"打开"框中输入Services.msc
  2. 在服务列表的"名称"列中,右键单击Net.Tcp端口共享服务,然后从菜单中选择"属性"
  3. 要启用服务的手动启动,请在"属性"窗口中选择"常规"选项卡,在"启动类型"框中选择"手动",然后单击"应用"
  4. 要启动服务,请在"服务状态"区域中单击"启动"按钮。服务状态现在应显示"已启动"
  5. 要返回服务列表,请单击"确定",然后退出MMC控制台

您也可以在这样的配置中启用NetTcpBinding。

<system.serviceModel>
  <bindings>
    <netTcpBinding name="portSharingBinding" 
                   portSharingEnabled="true" />
  </bindings>
  <services>
    <service name="MyService">
        <endpoint address="net.tcp://localhost/MyService"
                  binding="netTcpBinding"
                  contract="IMyService"
                  bindingConfiguration="portSharingBinding" />
    </service>
  </services>
</system.serviceModel>

如果端口共享服务已启用并且您手动启动了它,请检查端口8523上是否正在运行另一个应用程序。您可以在命令提示符下使用Netstat-a,也可以从以下地址使用TCPView。TCPView