2010-04-23 64 views
1

我有一个包含五个服务合同的WCF服务库。该库通过Windows服务托管。大部分(如果不是全部)WCF库的配置都是声明式的。我在配置代码中唯一做的事情是将实现服务合约的类的类型传递给ServiceHost。然后,我在Windows Service OnStart事件期间对每个服务调用Open。以下是错误消息我得到:通过Windows服务托管WCF服务库得到System.InvalidOperationException:尝试启动WCF服务

服务无法启动。 System.InvalidOperationException:服务'[Fubu.Conversion.Service1'没有应用程序(非基础设施)端点。这可能是因为没有为您的应用程序找到配置文件,或者因为在配置文件中找不到匹配服务名称的服务元素,或者因为服务元素中没有定义端点。 在System.ServiceModel.Description.DispatcherBuilder.EnsureThereAreNonMexEndpoints(ServiceDescription介绍) 在System.ServiceModel.Description.DispatcherBuilder.InitializeServiceHost(ServiceDescription描述,ServiceHostBase的ServiceHost) 在System.ServiceModel.ServiceHostBase.InitializeRuntime() 在System.ServiceModel .ServiceHostBase.OnBeginOpen() 在System.ServiceModel.ServiceHostBase.OnOpen(时间跨度超时) 在System.ServiceModel.Channels.CommunicationObject.Open(时间跨度超时) 在System.ServiceModel.Channels.CommunicationObject.Open() 在福布.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(); 
    } 

服务库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 
{ 

我已经看过“高,低”的,没有任何运气的解决方案。答案很明显吗?似乎没有解决这个问题的办法。由于

回答

1

其原因是痛苦的简单!!!! 正如我在问题的解释中指出的,我有一个WCF服务库托管在Windows服务中。我错误地定义了WCF服务库项目中的app.config文件。我确保app.config文件始终输出到build上的bin文件夹。一旦我将此配置文件重新定位或复制到Windows Service项目,问题就解决了,并且所有5个服务都正确启动。另一点需要注意的是确保为各个服务定义的端点正在使用唯一的端口。

而这个故事的寓意: “确保你定义和定位将承载您的服务库项目中的的app.config文件