微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – WCF net.tcp – 目标计算机拒绝连接

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

我已经按照许多文章编写了这个简单的服务,包括以下MSDN:Hosting and Consuming WCF services

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

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

Could not connect to net.tcp://localhost:8523/Inbound. The connection
attempt lasted for a time span of 00:00:00.9531494. TCP error code
10061: No connection Could be made because the target machine
actively refused it 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端口共享服务

>从“开始”菜单中,打开“服务管理控制台”,方法是打开“命令提示符”窗口并键入services.msc,或打开“运行”并在“打开”框中键入services.msc.
>在服务列表的“名称”列中,右键单击“Net.Tcp端口共享服务”,然后从菜单中选择“属性”.
>要启用服务的手动启动,请在“属性”窗口中选择“常规”选项卡,然后在“启动类型”框中选择“手动”,然后单击“应用”.
>要启动该服务,请在“服务状态”区域中单击“开始”按钮.现在,服务状态应显示为“已启动”.
>要返回服务列表,请单击“确定”,然后退出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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐