2010-04-23 65 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文件