У меня возникли проблемы с размещением службы WCF в службе Windows. я могу начать свою службу WCF в VS2008 и перейдя на базовый адрес в моем app.configХостинг службы WCF в службе Windows
<configuration>
<system.web>
<compilation debug="true" />
</system.web>
<system.serviceModel>
<services>
<service behaviorConfiguration="WCF.IndexerBehavior"
name="WCF.Indexer">
<endpoint address="" binding="wsHttpBinding" contract="WCF.IIndexer">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding"
contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://localhost/WCFService/Action/" />
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="WCF.IndexerBehavior">
<serviceMetadata httpGetEnabled="True"/>
<serviceDebug includeExceptionDetailInFaults="False" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
Я могу видеть, что это работает отлично, я получаю страницу говоря, что я создал сервис и примеры кода на том, как использование показано.
Теперь моим следующим шагом было создание службы Windows для размещения моего WCF, показанного выше.
Я только что использовал шаблон сервиса te windows, он дал мне Program.cs и Service1.cs, которые я переименовал в WindowsServiceHost.cs. В этом у меня есть:
private ServiceHost host;
public WindowsServiceHost()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
try
{
var serviceType = typeof(Indexer.WCF.Indexer);
host = new ServiceHost(serviceType);
host.Open();
}
catch (Exception ex)
{
}
}
protected override void OnStop()
{
if (host != null)
{
host.Close();
}
}
Все компилируется нормально, я могу запустить InstallUtil (я определил инсталлятор). Служба, которая использовалась для немедленного запуска и остановки, но отключение Windows Defender, избавилась от этого. Теперь служба запускается (как услуга сети) и остается (я думаю), но когда я перехожу к базовому адресу, я получаю страницу не найденную. Еще одна странная вещь, когда я пытаюсь остановить службу (которая по-прежнему отображается как бег), я получаю:
Ошибка 1061: Служба не может принимать управляющие сообщения в это время
Я пробовал все, но я в убыток.
Работает ли ваш сервис как автономный исполняемый файл, который может запускаться из командной строки, то есть в качестве приложения для самостоятельного хостинга?Вам нужно будет заставить это работать, прежде чем вы сможете запустить его как службу Windows в том виде, как вы описываете. Чтобы отладить эту проблему, может быть полезно ввести временную задержку в OnStart, чтобы вы могли присоединить отладчик Visual Studio к процессу службы до того, как остальная часть кода будет выполнена. Он также может помочь регистрировать исключения в журнале событий Windows, а не глотать их. –