WCF работает приложением, но не сервисом

У меня есть сервер WCF, который я могу выполнить как услуга или как приложение форм окон. Когда я выполняю его как приложение Windows Forms, я могу соединиться с ним через свое клиентское приложение. Однако, когда я выполняю его как услуга использование того же кода, я не могу соединиться с ним. Я подтвердил, что услуга работает и делает свою работу. Ниже файл конфигурации сервера.

<system.serviceModel>
  <services>
    <service name="Cns.TrafficCopService.ManagementService">
      <host>
        <baseAddresses>
          <add baseAddress="http://localhost:8000/TrafficCop/ManagementService" />
        </baseAddresses>
      </host>
      <endpoint address="" binding="wsHttpBinding" contract="Cns.TrafficCopService.IManagementService" />
    </service>
  </services>
</system.serviceModel>

и ее код хостинга, названный 100 миллисекундами после OnStart, называют:

if (this.serviceHost != null)
{
    this.serviceHost.Close();
}

this.serviceHost = new ServiceHost(typeof(ManagementService));
this.serviceHost.Open();

и файл конфигурации клиента:

<system.serviceModel>
  <bindings>
    <wsHttpBinding>
      <binding name="WSHttpBinding_IManagementService" />
    </wsHttpBinding>
  </bindings>
  <client>
    <endpoint
        address="http://localhost:8000/TrafficCop/ManagementService"
        binding="wsHttpBinding"
        bindingConfiguration="WSHttpBinding_IManagementService"
        contract="IManagementService"
        name="WSHttpBinding_IManagementService">
    </endpoint>
  </client>
</system.serviceModel>
5
задан Cœur 21 November 2019 в 12:41
поделиться

6 ответов

Вы могли отправить остальную часть Вашего кода для хостинга сервиса?

Ваш класс, который запускает сервис, должен наследоваться "ServiceBase" и должен реализовать "OnStart" и методы "OnStop". Эти методы вызываются сервисной консолью, чтобы запустить и остановить сервисный процесс, таким образом, Ваш ServiceHost должен быть открыт/закрыт в этих методах. Просто задавшись вопросом, не делаете ли, возможно, Вы этого.

2
ответ дан 15 December 2019 в 06:35
поделиться

Какая учетная запись услуга работает как? Интересно, не удается ли сервису запуститься, вероятно, из-за не наличия полномочий открыть порт.

Попытайтесь выполнить сервис в своих собственных идентификационных данных (но как услуга). Если это работает, это - проблема полномочий. Наиболее вероятными являются полномочия HTTP.SYS.

Для присвоения доступа Вы используете netsh на перспективе/окне 7, или httpcfg на xp.

1
ответ дан 15 December 2019 в 06:35
поделиться

Если бы Вы находитесь на той же машине, я предложил бы использовать NetNamedPipeBinding вместо WSHttpBinding. Это быстрее. Можно всегда возвращаться к ws-http при необходимости в использовании перекрестной машины в будущем.

Удостоверьтесь, что Ваша услуга на самом деле работает через TaskManager. В противном случае поместите Отладчик. Повреждение () оператор в конструкторе Вашего сервиса и шаге до находки, где этому не удается запуститься. Вот краткое пошаговое для создания сервиса Windows NT в C# (при необходимости в нем).

0
ответ дан 15 December 2019 в 06:35
поделиться

Где Вы брали код, из которого создает сервисный хост? Мое предположение кулака было бы то, что, когда Вы выполняете его как услуга Вы или не создаете ServiceHost, или Вы не сохраняете ссылку на него (таким образом, это собрано "мусор"),

0
ответ дан 15 December 2019 в 06:35
поделиться

Ничто в конечном счете не регистрируется об отказе зарегистрировать адрес?

Вы пытались отладить сервис (использующий присоединение Visual Studio к процессу)?

0
ответ дан 15 December 2019 в 06:35
поделиться

Вы проверили, что Вам определили ту конфигурацию в файлах конфигурации и для приложения WinForms и для сервиса?

0
ответ дан 15 December 2019 в 06:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: