2009-10-02 6 views
0

J'essaie d'héberger un service WCF dans un service Windows que je démarre via une application de console. Chaque service est son propre projet, tout comme l'application de console. J'ai copié le fichier app.config de la bibliothèque du service WCF dans le fichier app.config de l'application console, mais je reçois toujours le message suivant: «Le service n'a pas d'extrémité d'application ...». J'ai lu dans quelques endroits que l'erreur signifie que mes références de type ne sont pas entièrement qualifiées, mais j'ai double (triple, quadruple ...) vérifié cela. Et je suis sûr que j'ai un app.config. Il y a 3 exes dans mon répertoire de débogage: Console App, Console App vshost, Win Service. Le service Win n'avait pas de fichier app.config, j'ai donc essayé de copier son app.config au cas où il le chercherait, mais pas de chance. J'ai vérifié aussi pour vous assurer que les configs ont été nommés correctement (<programme> exe.config).Problème d'auto-hébergement du service WCF

Voici ce que j'utilise. Mon application de console crée une instance de JobSchdeuler et appelle JobSchedulerConsoleStart.

Code hôte:

public partial class JobScheduler : ServiceBase 
{ 
    ServiceHost jobServiceHost = null; 

    public JobScheduler() 
    { 
     ServiceName = "JobSchedulerService"; 
     InitializeComponent(); 
    } 

    #region Service Init/Uninit 

    /// <summary> 
    /// OnStart 
    /// </summary> 
    /// <param name="args"></param> 
    protected override void OnStart(string[] args) 
    { 
     if (jobServiceHost != null) 
     { 
      jobServiceHost.Close(); 
     } 

     jobServiceHost = new ServiceHost(typeof(JobSchedulerWCF.JobService)); 

     jobServiceHost.Open(); 
    } 

    /// <summary> 
    /// OnStop 
    /// </summary> 
    protected override void OnStop() 
    { 
     if (jobServiceHost != null) 
     { 
      jobServiceHost.Close(); 
      jobServiceHost = null; 
     } 
    } 

    #endregion 

    #region Debugging 

    public void JobSchedulerConsoleStart() 
    { 
     this.OnStart(null); 
     Console.WriteLine("Service Started."); 

     ProcessInput(); 

     Console.WriteLine("Service Stopped."); 
     this.OnStop(); 
    } 

    private void ProcessInput() 
    { 
     Console.WriteLine("Press any key to quit..."); 
     Console.ReadKey(); 
    } 

    #endregion 
} 

app.config

<?xml version="1.0"?> 
<configuration> 
    <system.serviceModel> 
     <services> 
      <service behaviorConfiguration="JobSchedulerWCF.Service1Behavior" name="JobSchedulerWCF.JobService, JobSchedulerWCF"> 
       <endpoint address="" binding="wsHttpBinding" contract="JobSchedulerWCF.IJobServiceController, JobSchedulerWCF"> 
        <identity> 
         <dns value="localhost" /> 
        </identity> 
       </endpoint> 
       <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
       <host> 
        <baseAddresses> 
         <add baseAddress="http://localhost:12345/jobService"/> 
        </baseAddresses> 
       </host> 
      </service> 
     </services> 
     <behaviors> 
      <serviceBehaviors> 
       <behavior name="JobSchedulerWCF.Service1Behavior"> 
        <!-- To avoid disclosing metadata information, 
         set the value below to false and remove the metadata endpoint above before deployment --> 
        <serviceMetadata httpGetEnabled="True"/> 
        <!-- To receive exception details in faults for debugging purposes, 
         set the value below to true. Set to false before deployment 
         to avoid disclosing exception information --> 
        <serviceDebug includeExceptionDetailInFaults="False" /> 
       </behavior> 
      </serviceBehaviors> 
     </behaviors> 
    </system.serviceModel>   
</configuration> 
+0

Pourriez-vous également nous fournir le code hôte? – Philippe

+0

Le code a été fourni. –

Répondre

0

Je ne suis jamais allée au fond des choses. Il y avait quelque chose de léger dans la config/projet. J'ai reconstruit la solution et le problème est parti.

0

Ne vos fichiers de configuration sont nommés

  • Console.App.exe.config
  • Win.Service. exe.config

?

EDIT: Si je me souviens bien, il y avait un problème avec la version bêta des noms WCF et Service.

Essayez de changer

<service behaviorConfiguration="JobSchedulerWCF.Service1Behavior" name="JobSchedulerWCF.JobService, JobSchedulerWCF"> 

à

<service behaviorConfiguration="JobSchedulerWCF.Service1Behavior" name="JobSchedulerWCF.JobService"> 

Retirez le nom de l'assemblage dans vos fichiers de configuration.

S'il vous plaît laissez-moi savoir si cela résout le problème. Je ne l'ai pas attaché.

+0

Oui, ils le sont. J'ai mis à jour mon post pour inclure ceci. –