Блоки со знаком препятствуют тому, чтобы мой сервис запустился

Если бы это было "получить" -

https://mychart.covh.org/MyChart/logincheck.asp?Login=AllStarUser&Password=FiveStarPassword  

будет правильным.

6
задан Wonko 16 February 2009 в 21:44
поделиться

3 ответа

Authenticode подписывая Ваши блоки может иметь очень отрицательный эффект на холодный запуск. См. эту статью KB для деталей.

http://support.microsoft.com/default.aspx/kb/936707

2
ответ дан 16 December 2019 в 21:46
поделиться

Как spacedog сказал, Authenticode может оказать плохое влияние на время запуска. Таким образом, вопрос - то, что Вы подписываете? Это должно быть достаточно к знаку Authenticode только Ваш сервисный исполняемый файл, который в свою очередь должен только сослаться на сборки со строгим именем. Таким образом издержки проверки подписи Authenticode.

Вы могли установить свои блоки на GAC - если возможный - это немного повысит выполнение запуска, потому что проверка строгого имени пропускается (см. Authenticode и Assemblies), и / или Вы могли также ngen свои блоки, если время запуска все еще является проблемой.

От ответа до службы Windows запускают тайм-аут Romulo A. Ceccon:

Это - хорошая практика, чтобы закончить запускать Ваш сервис максимально быстро. Так, во время начального состояния сделайте только, что абсолютно необходимо подтвердить, что оно запустилось успешно; и сделайте остальных позже. Если запуск является все еще долгим процессом, используйте SetServiceStatus периодически, чтобы сообщить Диспетчеру управления службами, что Вы еще не закончили, таким образом, он не делает тайм-аута Ваш сервис.

В дополнение к SetServiceStatus Вы могли также попытаться сказать Диспетчеру управления службами (SCM), что для сервиса нужно дополнительное время для запуска путем вызова ServiceBase.RequestAdditionalTime.

1
ответ дан 16 December 2019 в 21:46
поделиться

Эта проблема очень типична для подписанных исполняемых файлов службы .NET: служба не запускается во время загрузки, но при последующем запуске вручную запускается нормально. Будь то ServiceBase.RequestAdditionalTime не имеет значения: на самом деле код пользователя не выполняется вообще до истечения времени ожидания запроса запуска службы. Этот эффект еще более выражен на машинах без подключения к Интернету: в этом случае даже вручную запустить службу из SCM не удастся.

Чтобы решить эту проблему, отключите проверку подписи Authenticode во время загрузки, чтобы создать свидетельство издателя , добавив следующие элементы в файл .exe.config:

<configuration>
    <runtime>
        <generatePublisherEvidence enabled="false"/>
    </runtime>
</configuration>

Свидетельство издателя - малоиспользуемая функция безопасности доступа для кода (CAS): только если ваша служба полагается на PublisherMembershipCondition, ее отключение вызовет проблемы. Во всех других случаях это устранит постоянные или периодические сбои при запуске, поскольку больше не требуется, чтобы среда выполнения выполняла дорогостоящие проверки сертификатов (включая поиск в списке отзыва).

Редактировать, июль 2010 г .: Для приложений, использующих версию 4.0 .NET Framework, это временное решение больше не требуется.

5
ответ дан 16 December 2019 в 21:46
поделиться
Другие вопросы по тегам:

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