2012-04-25 65 views
1

我將WCF作爲Windows服務使用net.tcp託管。在啓動服務時安裝Windows服務後,我得到該服務已啓動並停止。將WCF作爲Windows服務託管「服務已啓動並停止」

錯誤說爲了添加一個端點到服務'MYService',必須指定一個非空的合同名稱。 在System.ServiceModel.Description.ConfigLoader.LookupContract(字符串contractName,字符串服務名)

我的OnStart函數如下

protected override void OnStart(string[] args) 
     { 
      try 
      { 
       if (myServiceHost != null) 
       { 
        myServiceHost.Close(); 
       } 
       myServiceHost = new ServiceHost(typeof(MYservice)); 
       myServiceHost.Open(); 

      } 
      catch (Exception ex) 
      { 
       log.Error("ONStart", ex); 
       throw; 
      } 

     } 

配置文件是如下:

<serviceHostingEnvironment minFreeMemoryPercentageToActivateService="10" /> 
<services> 
    <service behaviorConfiguration="myServiceBehavior" 
    name="myNamespace.myTestService"> 
    <endpoint binding="netTcpBinding" bindingConfiguration="netTCPBindingConfig" contract="myNamespace.ServiceInterface.ImyTestService" /> 
    <endpoint binding="mexTcpBinding" bindingConfiguration="" /> 
    <host> 
     <baseAddresses> 
     <add baseAddress="net.tcp://10.1.3.69:8523/TestService" /> 
     </baseAddresses> 
     <timeouts closeTimeout="10:00:10" openTimeout="10:01:00" /> 
    </host> 
    </service> 
</services> 
<behaviors> 
    <serviceBehaviors> 
    <behavior name="myServiceBehavior"> 
     <serviceMetadata httpGetEnabled="false" httpsGetEnabled="false" /> 
     <serviceDebug includeExceptionDetailInFaults="false" /> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 

+0

請發佈您的WCF配置 – 2012-04-25 09:30:32

+0

錯誤在您的配置文件中。此行爲特定於在服務啓動期間發生某種異常的情況。發佈您的配置。 – paramosh 2012-04-25 09:32:27

回答

4

在您的配置文件,有:

<endpoint binding="netTcpBinding" bindingConfiguration="netTCPBindingConfig" contract="myNamespace.ServiceInterface.ISomeService" /> ` 

相反的ISomeService,你必須指定哪個接口由實施MYService

編輯

此外,MEX綁定必須指定一個合同,即contract="IMetadataExchange"

再次編輯

爲方便起見,這是您的MEX綁定應該怎麼樣子:

<endpoint binding="mexTcpBinding" address="mex" bindingConfiguration="" contract="IMetadataExchange" /> 
+0

Ofcourse我指定了由服務實現的Interfacename – xaria 2012-04-25 09:56:28

+1

@xaria另外,所有端點都必須指定一個合約。 – 2012-04-25 09:58:39

+0

好吧,我將合同添加到mex端點後,出現以下錯誤System.InvalidOperationException:綁定實例已關聯以偵聽URI'net.tcp://10.1.3.69:8523/TestService'。如果兩個端點想要共享相同的ListenUri,則它們也必須共享相同的綁定對象實例。兩個衝突的端點是在AddServiceEndpoint()調用,配置文件或AddServiceEndpoint()和config的組合中指定的。 – xaria 2012-04-25 10:08:34

-2

請試試這個:

 protected override void OnStart(string[] args) 
     { 
      try 
      { 
       myServiceHost = new ServiceHost(typeof(MYservice)); 
       myServiceHost.Open(); 
       Console.ReadKey(); 
      } 
      catch (Exception ex) 
      { 
       log.Error("ONStart", ex); throw; 
      } 
      finally 
      { 
       myServiceHost.Close(); 

      } 
     } 
+0

當然,這只是一旦開始就關閉服務。關機需要完成。 – Bronumski 2012-04-25 09:46:44