Проблемы с конечными точками WCF, размещенными в службе Windows - PullRequest
2 голосов
/ 28 апреля 2010

У меня есть управляемая служба Windows, на которой размещены несколько конечных точек WCF. Служба настроена на автоматический запуск при перезагрузке ПК. При перезагрузке я обнаружил, что эта строка кода:

ServiceHost wcfHost1 = new ServiceHost(typeof(WCFHost1));

в методе OnStart () службы требуется для выполнения от 15 до 20 секунд. На самом деле у меня есть два таких утверждения, но второе выполняется в одно мгновение. Это первый, который занимает так много времени. Кто-нибудь знает, что может быть причиной узкого места? Из-за этого иногда вызов превышает 30 секунд, и в результате SCM считает, что время моей службы истекло при попытке инициализации. Теперь я знаю, что мне легко просто раскрутить поток, чтобы сделать это, и сразу же вернуться из OnStart (), но я хотел бы знать, что может вызвать эту задержку.

Это происходит только , когда служба запускается при перезагрузке ПК. Если ПК включен и работает, служба запускается и останавливается менее чем за секунду.

Ответы [ 3 ]

0 голосов
/ 25 июня 2010

У меня были проблемы со службой Windows, для запуска которой потребовалось много времени.Я узнал, что это из-за подписанных сборок, которые я использовал (Enterprise Library)..NET пытался проверить подпись Authenticode при загрузке сборки (возможно, ваш конструктор впервые использует тип, который вызывает загрузку этой сборки).Просто попробуйте добавить следующее в ваш app.config.Когда это не работает, у вас есть другая проблема.

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

Вы также можете найти дополнительную информацию здесь: http://support.microsoft.com/kb/936707 и Почему мое приложение .Net связывается с Verisign?

0 голосов
/ 07 июля 2010

Нет проблем с вашим сервисом WCF. Лучший способ решить вашу проблему - создать фиктивную операцию, которую клиент должен вызывать прежде всего. Это заставит вашего клиента произвести рукопожатие на вашем сервисе до вашей реальной транзакции. Я фактически использовал фиктивную операцию, чтобы время от времени вызывать мой сервис, чтобы узнать, все еще ли он жив.

0 голосов
/ 28 апреля 2010

Это может предоставить дополнительную помощь. По сути, я думаю, что вам нужно выяснить, какие у вас есть зависимости и добавить их в ваш сервис, чтобы они начинались раньше, чем у вас.

Это просто выстрел в темноте, но может случиться так, что .net framework еще не загрузился. Возможно, вы можете попытаться установить автоматический запуск с отложенным автоматическим запуском, что позволит времени .net Framework и другим службам Windows запускаться.

Кроме того, при запуске приложения .net оно компилируется с помощью компилятора Just-In-Time. Это может подождать, пока .net его скомпилирует.

Наконец, в зависимости от типа используемого вами экземпляра WCF, у вас может возникнуть проблема с конструктором, требующим некоторое время для инициализации.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...