2012-04-25 2 views
1

nettcp를 사용하여 Windows 서비스로 WCF를 호스팅하고 있습니다. 서비스를 시작할 때 Windows 서비스를 설치 한 후 해당 서비스가 시작되고 중지되었습니다.Windows 서비스로 WCF 호스팅 "서비스가 시작 및 중지됨"

오류 메시지 : '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 설정을 게시하십시오 –

+0

설정 파일에 오류가 있습니다. 이 동작은 서비스 시작 중 일부 예외가 발생한 경우에 해당합니다. 설정을 게시하십시오. – paramosh

답변

4

를,이 :

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

대신 ISomeService, 당신은에 의해 구현되는 어느 인터페이스를 지정해야합니다 MYService.

또한 편집

, MEX 지정된 계약이 있어야 바인딩, 즉 다시 수정 여러분의 편의를 위해

이 당신의 MEX가 같아야 바인딩 방법

입니다 contract="IMetadataExchange" :

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

Ofcourse 서비스에 의해 구현 된 Interfacename을 지정했습니다. – xaria

+1

@xaria 또한 모든 끝점에 계약이 지정되어 있어야합니다. –

+0

좋아요. mex 끝점에 계약을 추가 한 후 다음 오류가 발생합니다. System.InvalidOperationException : 바인딩 인스턴스가 이미 URI 'net.tcp : //10.1.3.69 : 8523/TestService'를 수신 대기하고 있습니다. 두 개의 엔드 포인트가 동일한 ListenUri을 공유하려는 경우에도 동일한 바인딩 오브젝트 인스턴스를 공유해야합니다. 충돌하는 두 종점은 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