У меня есть служба 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, слишком занята.
Я знаю, что мой клиент - единственное, что пытается подключиться к этой службе, поэтому почему я получаю это сообщение об ошибке? И как я могу это исправить? При попытке вызвать метод не время, оно выдает исключение почти сразу.
ИЗМЕНИТЬ
Хорошо, теперь я узнал, что мой TestServer (а не клиент Windows, а консольное приложение) также дает ту же ошибку. Ранее сегодня этого не произошло, и ни служба WCF, ни TestServer не были изменены.
Затем я попытался изменить порт на 8080 вместо 8000, и он сработал. Затем я попробовал то же самое для службы Windows, и это также сработало (после запуска команды netsh http
на новом порту)
Так что-то случилось с http на порту 8000 по какой-то причине. Конечно, я попытался перезапустить систему.
Это меня озадачивает, поэтому, если кто-нибудь знает, что здесь происходит, я был бы признателен.