2012-04-25 14 views
1

nettcpを使用してWindowsサービスとしてWCFをホストしています。私がサービスを開始したときにWindowsサービスをインストールした後、そのサービスが開始され、停止したことになります。WindowsサービスとしてのWCFのホスティング「サービスが開始され、停止しました」

エラーは、サービス 'MYService'にエンドポイントを追加するために、空でない契約名を指定する必要があります。

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; 
      } 

     } 

次のように設定ファイルがあるが、以下のように私のOnStart関数であるSystem.ServiceModel.Description.ConfigLoader.LookupContract(文字列contractName、文字列serviceNameの)

<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設定を投稿してください –

+0

設定ファイルにエラーがあります。この動作は、サービス開始時に何らかの例外が発生した場合に特有です。あなたの設定を投稿してください。 – paramosh

答えて

4

を、そこにある:

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

代わりのISomeService、あなたがで実装された方のインターフェースを指定する必要がありますMYService

EDITさらに

、MEXバインディングが指定された契約を持っている必要があります、つまりあなたの便宜のためcontract="IMetadataExchange"

EDIT AGAIN

、これはあなたのMEXバインディングはのようになります方法です

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

もちろん私はサービスによって実装されているInterfacenameを指定しました – xaria

+1

@xariaまた、すべてのエンドポイントで契約を指定する必要があります。 –

+0

私はmexエンドポイントに契約を追加した後、次のエラーが表示されます。System.InvalidOperationException:バインディングインスタンスがすでにURI 'net.tcp://10.1.3.69:8523/TestService'を待機するように関連付けられています。 2つのエンドポイントが同じListenUriを共有したい場合、同じバインディングオブジェクトインスタンスも共有する必要があります。競合する2つのエンドポイントは、AddServiceEndpoint()呼び出し、設定ファイル、またはAddServiceEndpoint()とconfigの組み合わせで指定されています。 – xaria

-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

関連する問題