将服务引用添加到Windows服务中托管的WCF服务时出现问题

时间:2009-10-26 23:27:50

标签: wcf

我正在为现有的Windows服务进程构建WCF服务接口。 WCF接口的目的是提供“命令通道”以实现Windows服务的管理功能。定义了几种OperationContract方法,旨在从服务小程序的启动/停止/暂停功能之外提取信息并控制Windows服务的行为。

此WCF服务旨在成为现有流程的一部分。因此,在IIS或ServiceHost中运行WCF服务不是一种选择。

我的问题是虽然ServiceHost没有在Open()上抛出错误,但我无法让“WCF测试客户端”(或任何其他人)找到该服务。

这是我的第一个WCF服务,并且无法找到符合我要做的事情的示例或模式。所以我没有幻想,如果我做了很多错事,就不会感到惊讶。而且,不是我有'portSharingBinding = false'。我确实有这个,但它抛出了一个错误,指向另一个我不想运行的服务。 是否需要端口共享?

配置信息:

<system.serviceModel>  
  <bindings>  
    <netTcpBinding>  
      <binding  name="PortBinding" portSharingEnabled="false" />  
    </netTcpBinding>  
  </bindings>  
  <services>  
    <service name="NameChanged.ServiceManager.CommandService">  
    <endpoint address="net.tcp://localhost"  
              binding="netTcpBinding"  
              bindingConfiguration="PortBinding"  
              name="ServiceManagerCommandChannel"  
              contract="NameChanged.ServiceManager.ICommandService" />  
    </service>  
  </services>  
</system.serviceModel>  

我还使用以下代码尝试了no config路由:

  ServiceHost host = new ServiceHost(typeof(CommandService)))  
  host.AddServiceEndpoint(typeof(ICommandService),  
                           new NetTcpBinding(), "net.tcp://localhost:8000");  
  host.Open();  

此外,Open()没有错误。但是,没有成功连接到服务。

感谢您的时间,
吉姆

1 个答案:

答案 0 :(得分:4)

我只能与WCF测试客户端对话,但它正在寻找您的服务的元数据,以便它可以为它生成代理。从上面的配置中,您似乎没有公开元数据交换端点。请查看此链接以获取更多信息:

http://weblogs.asp.net/fabio/archive/2009/02/28/net-tcp-mex-endpoints-and-portsharing-in-wcf.aspx

您可以在不使用公开的元数据生成代理的情况下访问您的服务,但它需要您手动创建通道来执行此操作:

http://msdn.microsoft.com/en-us/library/ms734681.aspx