2009-02-16 16 views
5

Quando si firmano gli assembly nel mio servizio con il signtool.exe di Verisign, non si avvia all'avvio della macchina su una macchina che esegue Windows 2003 Server. Il registro eventi ha due eventi:Gli assembly firmati impediscono l'avvio del servizio

"Timeout (30000 millisecondi) in attesa che il servizio xxx Service si connetta." e "Impossibile avviare il servizio di assistenza xxx a causa del seguente errore: Il servizio non ha risposto alla richiesta di avvio o controllo in modo tempestivo."

Si avvia correttamente quando la macchina è in funzione. Inizia bene in XP e Vista. Inizia quando gli assiemi non sono firmati.

risposta

2

Authenticode firmare i vostri assiemi può avere un effetto molto negativo all'avvio a freddo. Vedi questo articolo della Knowledge Base per i dettagli.

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

+0

Anche se l'installazione di una patch in cui MS dice che non è testata non suona molto attraente su un sistema di produzione ... –

1

Come ha detto Spacedog, Authenticode può avere un cattivo impatto sul tempo di avvio. Quindi la domanda è: cosa stai firmando? Dovrebbe essere sufficiente per firmare Authenticode solo il file eseguibile del servizio che a sua volta deve fare riferimento solo agli assembly con nome forte. Quindi il sovraccarico di verificare la firma Authenticode.

È possibile installare i propri assembly nel GAC, se possibile, ciò migliorerà leggermente le prestazioni di avvio perché la convalida del nome sicuro viene saltata (vedere Authenticode and Assemblies) e/o si potrebbero anche annullare gli assembly se il tempo di avvio è ancora un problema.

Dalla risposta a Windows service startup timeout da Romulo A. Ceccon:

It's good practice to finish starting your service as fast as possible. So, during the start state, do only what you absolutely need to acknowledge it started successfully; and do the rest later. If the start is still a lengthy process, use SetServiceStatus periodically to inform the Service Control Manager that you have not yet finished, so it does not time-out your service.

Oltre a SetServiceStatus si potrebbe anche provare a raccontare la Gestione controllo servizi (SCM) che il servizio ha bisogno di più tempo per l'avvio chiamando lo ServiceBase.RequestAdditionalTime.

+0

Questa risposta sembra confondere firme Authenticode con firme nome forte? – Dave

+1

No. In quale modo? –

+0

(segue) Quando si utilizza Authenticode è sufficiente che gli assembly di riferimento siano firmati con nome sicuro. Stavo cercando di trovare un riferimento, sfortunatamente ho trovato solo questo post: http://social.msdn.microsoft.com/Forums/en-US/winformssetup/thread/493aca7f-b5ea-4462-a15f-affe874bfe44/ –

4

Questo problema è molto comune per gli eseguibili del servizio .NET firmati: il servizio non verrà avviato all'avvio, ma funzionerà correttamente se avviato manualmente in seguito. L'utilizzo di ServiceBase.RequestAdditionalTime è irrilevante: infatti, nessun codice utente viene eseguito prima del timeout della richiesta di avvio del servizio. Questo effetto è ancora più pronunciato su macchine senza connettività Internet: in tal caso, anche l'avvio manuale del servizio da SCM avrà esito negativo.

Per risolvere questo problema, disable the verification of the Authenticode signature at load time in order to create Publisher evidence, con l'aggiunta dei seguenti elementi al file exe.config:

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

Publisher evidenza è un (CAS) caratteristica poco utilizzata Code Access Security: solo se il vostro servizio si affida a PublisherMembershipCondition la disabilitazione causa problemi. In tutti gli altri casi, i guasti di avvio permanenti o intermittenti scompariranno, non richiedendo più che il runtime esegua costosi controlli dei certificati (comprese le ricerche degli elenchi di revoche).

Modifica, luglio 2010: Per le applicazioni che utilizzano la versione 4.0 di .NET Framework, questa soluzione alternativa non è più necessaria.

Problemi correlati