繁体   English   中英

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

[英]WCF net.tcp - Connection refused by target machine

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

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

我的服务和配置文件完全如上文所述。

使用InstallUtil.exe作为Windows服务安装此WCF服务后,我可以看到服务正确安装并运行没有任何错误。 我试图在Windows服务的OnStart和OnStop方法上添加跟踪,但没有发现任何错误。 一旦我尝试从另一个解决方案引用此端点,我就会收到以下错误。

无法连接到net.tcp:// localhost:8523 / Inbound。 连接尝试持续时间跨度为00:00:00.9531494。 TCP错误代码10061:无法建立连接,因为目标计算机主动拒绝它127.0.0.1:8523。

我已经通过互联网尝试了与此问题相关的大部分帖子,并且我尝试打开防火墙,卸载防病毒软件,尝试不同的端口,明确为防火墙中的这些端口创建入站和出站规则等。仍然我不是能够访问承载基于net.tcp的WCF服务的Windows服务。 我的TCP端口共享服务和TCP列表器适配器服务已打开,我还打开了运行这些TCP服务所需的必要Windows功能。

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

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

现在我的问题是,我应该在我的服务启动时在任务管理器中看到这个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>

让我们通过淘汰来调试。 你启用了端口共享吗? 这是为了跨多个进程共享TCP端口。根据Microsoft“此服务作为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。 套装软件

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM