我有一个包含五个服务合同的WCF服务库。该库通过Windows服务托管。大多数(如果不是全部)我的WCF库配置都是明确的。我在配置代码中唯一要做的就是将实现服务契约的类的类型传递给ServiceHost。然后,我在Windows Service OnStart事件期间在每个服务上调用Open。这是我收到的错误消息:
无法启动服务。 System.InvalidOperationException:服务'[Fubu.Conversion.Service1'具有零应用程序(非基础结构)端点。这可能是因为没有为您的应用程序找到配置文件,或者因为在配置文件中找不到与服务名称匹配的服务元素,或者因为没有在服务元素中定义端点。 在System.ServiceModel.Description.DispatcherBuilder.EnsureThereAreNonMexEndpoints(ServiceDescription description) 在System.ServiceModel.Description.DispatcherBuilder.InitializeServiceHost(ServiceDescription description,ServiceHostBase serviceHost) 在System.ServiceModel.ServiceHostBase.InitializeRuntime() 在System.ServiceModel.ServiceHostBase.OnBeginOpen() 在System.ServiceModel.ServiceHostBase.OnOpen(TimeSpan超时) 在System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan超时) 在System.ServiceModel.Channels.CommunicationObject.Open() 在Fubu.RemotingHost.RemotingHost.StartServ ...
protected override void OnStart(string[] args)
{
// Uncomment to debug this properly
//System.Diagnostics.Debugger.Break();
StartService1();
StartService2();
StartService3();
StartService4();
StartService5();
}
以上各项只需执行以下操作:
private void StartSecurityService()
{
host = new ServiceHost(typeof(Service1));
host.Open();
}
Service Lib app.congfig摘要
<services>
<service behaviorConfiguration="DefaultServiceBehavior" name="Fubu.Conversion.Service1">
<endpoint address="" binding="netTcpBinding" bindingConfiguration="TCPBindingConfig"
name="Service1" bindingName="TCPEndPoint" contract="Fubu.Conversion.IService1">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexTcpBinding" bindingConfiguration=""
name="mexSecurity" bindingName="TcpMetaData" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost:8025/Fubu/Conversion/Service1/" />
</baseAddresses>
</host>
</service>
...
合同的设置如下: 名称空间Fubu.Conversion.Service1 {
[ServiceContract(Namespace = "net.tcp://localhost:8025/Fubu")]
public interface IService1
{
对于一个没有运气的解决方案,我看起来“高低”。答案显而易见吗?对此的解决方案似乎并非如此。感谢
答案 0 :(得分:1)
原因很简单!!!! 正如我在问题的解释中所提到的,我在Windows服务中托管了WCF服务库。我错误地定义并找到了WCF服务库项目中的app.config文件。我确保app.config文件始终输出到构建的bin文件夹。一旦我将此配置文件重新定位或复制到Windows服务项目,问题就解决了,所有5个服务的服务都正确启动。另一点需要注意的是确保为各个服务定义的端点使用唯一端口。
故事的寓意: “确保在项目中定义并找到将托管服务库的 app.config 文件。