WCF net.tcp - 目标计算机

时间:2015-12-28 15:01:36

标签: c# .net wcf windows-services 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方法发现没有错。 一旦我尝试从另一个解决方案引用此端点,我 得到以下错误。

  

无法连接到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>

1 个答案:

答案 0 :(得分:1)

让我们通过淘汰进行调试。 你启用了端口共享吗? 这是为了跨多个进程共享TCP端口。根据Microsoft&#34;此服务作为WCF的一部分安装,但默认情况下不启用该服务作为安全预防措施&#34;。

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

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