У меня есть служба WCF, которая размещена внутри службы Windows. Служба Windows имеет метод OnStart
, подобный следующему:
protected override void OnStart(string[] args)
{
serviceHost = new ServiceHost(typeof (RouterService));
serviceHost.Open();
}
Сейчас это довольно минимально, так как я пытаюсь найти проблему. Так как я не поместил здесь обработку ошибок, любые исключения на этом этапе должны были помешать правильному запуску службы. Он запускается, а затем автоматически сразу останавливается.
Мой конфигурационный файл для службы WCF выглядит следующим образом:
<?xml version="1.0"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
<system.serviceModel>
<services>
<service name="WcfService.RouterService"
behaviorConfiguration="serviceBehavior" >
<endpoint address="RouterService" contract="WcfService.IRouterService" binding="wsHttpBinding" bindingConfiguration="NoSecurity" />
<endpoint address="mex" contract="IMetadataExchange" binding="mexHttpBinding" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:8000"/>
</baseAddresses>
</host>
</service>
</services>
<bindings>
<wsHttpBinding>
<binding name="NoSecurity">
<security mode="None" />
</binding>
</wsHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="serviceBehavior" >
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
Кроме того, я добавил пользователя NETWORK SERVICE (который запускается службой, чтобы иметь возможность прослушивать Http через указанный порт:
netsh http add urlacl url=http://+:8000/ user="NETWORK SERVICE"
Теперь в клиенте я выбираю Add Service Reference
. Я могу найти сервер, и VS также удается создать конфигурацию и создать файлы прокси. Затем внутри клиента я создаю экземпляр прокси и открываю его. Все по-прежнему хорошо. Но при вызове первого метода на прокси я получаю следующее исключение:
Служба HTTP, расположенная по адресу http://localhost:8000/RouterService, слишком занята.
Я знаю, что мой клиент - единственное, что пытается подключиться к этой службе, так почему же тогда я получаю это сообщение об ошибке? И как я могу это исправить? Он не истекает при попытке вызова метода, он генерирует исключение почти сразу.
EDIT
Хорошо, теперь я обнаружил, что мой TestServer (не клиент Windows, а консольное приложение) также выдает ту же ошибку. Ранее сегодня этого не произошло, и служба WCF или TestServer не изменились.
Затем я попытался изменить порт на 8080 вместо 8000, и это сработало. Затем я попробовал то же самое для службы Windows, и это тоже сработало (после запуска команды netsh http
на новом порту)
По какой-то причине что-то случилось с http на порту 8000. Я попытался перезагрузить систему также, конечно.
Это озадачивает меня, поэтому, если у кого-то есть какие-либо идеи о том, что здесь происходит, я был бы признателен.