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>
Pourriez-vous également nous fournir le code hôte? – Philippe
Le code a été fourni. –