2012-04-25 101 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