我正在为现有的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()没有错误。但是,没有成功连接到服务。
感谢您的时间,
吉姆
答案 0 :(得分:4)
我只能与WCF测试客户端对话,但它正在寻找您的服务的元数据,以便它可以为它生成代理。从上面的配置中,您似乎没有公开元数据交换端点。请查看此链接以获取更多信息:
http://weblogs.asp.net/fabio/archive/2009/02/28/net-tcp-mex-endpoints-and-portsharing-in-wcf.aspx
您可以在不使用公开的元数据生成代理的情况下访问您的服务,但它需要您手动创建通道来执行此操作: