Самостоятельная проблема хостинга WCF
Я пытаюсь разместить службу WCF внутри службы Windows, которую запускаю через консольное приложение. Каждый сервис - это собственный проект, как и консольное приложение. Я скопировал app.config из библиотеки службы WCF в app.config консольного приложения, но продолжаю получать сообщение "Служба имеет нулевые конечные точки приложения...". Я читал в нескольких местах, что ошибка означает, что ссылки на мои типы не полностью определены, но я дважды (тройной, четырехкратный...) проверил это. И я уверен, что у меня есть app.config. В моем каталоге отладки 3 exes: Консольное приложение, Консольное приложение vshost, Win Service. Служба Win не имела app.config, поэтому я попытался скопировать его app.config на тот случай, если он его ищет, но не повезло. Я также проверил, чтобы убедиться, что конфиги были названы правильно (
Вот что я использую. Мое консольное приложение создает экземпляр JobSchdeuler
и звонки JobSchedulerConsoleStart
,
Код хоста:
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>
2 ответа
Я никогда не доходил до сути этого. В конфиге / проекте было что-то не так. Я перестроил решение, и проблема ушла.
Ваши конфигурационные файлы названы
- Console.App.exe.config
- Win.Service.exe.config
?
РЕДАКТИРОВАТЬ: Если я правильно помню, была проблема с бета-версии имен WCF и службы.
Попробуй поменять
<service behaviorConfiguration="JobSchedulerWCF.Service1Behavior" name="JobSchedulerWCF.JobService, JobSchedulerWCF">
в
<service behaviorConfiguration="JobSchedulerWCF.Service1Behavior" name="JobSchedulerWCF.JobService">
Удалите имя сборки в ваших конфигурационных файлах.
Пожалуйста, дайте мне знать, если это решит проблему. Я не связал это.