In questo articolo vorrei trattare una problematica nota che però genera ancora qualche chiamata al supporto tecnico.

Il problema si presenta nel seguente modo: dopo aver installato una delle Roll Up dalla 1 alla 4 di Exchange 2007 Service Pack 1, può capitare che alcuni dei servizi di Exchange, o anche dei tools di monitoraggio e troubleshooting (ExBPA o ExTRA)  non riescano improvvisamente più ad avviarsi sul alcuni server.

Il servizio sembra andare misteriosamente in timeout senza un errore specifico e l'application log non segnala nessun tipo di errore specifico, a parte i seguenti generici:

Event Type: Error
Event Source: Service Control Manager
Event ID: 7000
Description: The Microsoft "service name" service failed to start due to the following error:
The service did not respond to the start or control request in a timely fashion.

Il problema si genera per quei servizi o applicativi che sono stati sviluppati in managed code, ovvero in .NET, generalmente fanno capo ai seguenti eseguibili:

[Percorso di installazione di Exchange]\
Bin\ExBPA.exe
Bin\ExBPACmd.exe
Bin\ExTRA.exe

Bin\EdgeTransport.exe

Bin\Microsoft.Exchange.Cluster.ReplayService.exe
Bin\Microsoft.Exchange.EdgeSyncSvc.exe
Bin\Microsoft.Exchange.Monitoring.exe
Bin\Microsoft.Exchange.Search.ExSearch.exe
Bin\Microsoft.Exchange.ServiceHost.exe
Bin\EdgeTransport.exeBin\MSExchangeMailboxAssistants.exe
Bin\MSExchangeMailSubmission.exe
Bin\MSExchangeTransportLogSearch.exe
ClientAccess\PopImap\Microsoft.Exchange.Imap4.Exe
ClientAccess\PopImap\Microsoft.Exchange.Pop3.Exe

Bin\Microsoft.Exchange.AntispamUpdateSvc.exe
Bin\MsExchangeFDS.exe
Bin\MSExchangeTransport.exe

Per quale motivo i servizi dovrebbero andare in timeout?

La problematica è di per se tanto misteriosa quanto di semplice risoluzione!

Intanto il problema si presenta per quei server che non hanno accesso diretto ad internet e devono passare obbligatoriamente tramite un web proxy.

In sostanza all'avvio del programma viene caricato dal .NET Framework l'assembly del programma che a sua volta cerca di verificare la firma Authenticode con cui è stato firmato il codice. Per fare questa attività deve essere verificato che il codice non sia stato firmato con un certificato non valido, e per poter fare questa verifica la funzione del CryptoAPI cerca di collegarsi al sito http://crl.microsoft.com per scaricare la Certificate Revocation List con cui fare il controllo.

Nel caso in cui non vi sia l'accesso ad internet o tale accesso sia vincolato al passaggio attraverso un proxy server, questa operazione fallisce fintanto che i continui tentativi superano il tempo massimo che il Service Control Manger ha definito come validi per l'avvio di un servizio.

Soluzione

Prima Soluzione

Su un server 2003 è possibile utilizzare il comando proxycfg.exe per settare un proxy a livello di sistema e utilizzabile dal server stesso. Putroppo questa soluzione ha il problema che se il proxy è autenticato, il comando non può essere utilizzato in quanto non permette di specificare le credenziali da usare.

Seconda soluzione

Questa è la soluzione consigliata e raccomandata, si può applicare in 2 modi, uno manuale e uno automatico, entrambi richiedono l'installazione di una delle seguenti fixes e in pratica evitano che venga eseguita la verifica di validità tramite la CRL:

Consiglio di installare il Service Pack 1 per la .NET Framework che contiene entrambi gli aggiornamenti sopra indicati:

Manuale

La soluzione manuale consiste nel creare, dove non esistesse già, un file di configurazione per il servizio\programma che non parte.

Questo file di configurazione sarà nominato con lo stesso nome completo di estensione dell'eseguibile, ma avrà appesa un estensione aggiuntiva ".config".

Per fare un esempio: se il programma si chiamasse "Microsoft.exchange.transport.exe", il file di configurazione dovrebbe risultare "Microsoft.exchange.transport.exe.config"

Il file di configurazione dovrà contenere la seguente entry:

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

Se il file fosse già presente con una struttura simile o con informazioni maggiori, è sufficiente aprirlo con notepad, trovare il percorso in <Configuration><runtime> e inserire la entry <generatePublisherEvidence enabled="false" />

Automatico

La versione automatica è la migliore, e si tratta semplicemente di installare la Roll Up 5 di Exchange 2007 Sp1.

Description of Update Rollup 5 for Exchange Server 2007 Service Pack 1
http://support.microsoft.com/?kbid=953467

DownloadDownload the Update Rollup 5 for Exchange Server 2007 Service Pack 1 package now.

L'installer della RU5 provvede in automatico a fare il controllo di esistenza e bontà dei files di configurazione per i servizi riportati all'inizio dell'articolo.

Nel caso il file di configurazione non fosse presente, l'installer provvede a creare il file stesso e a compilarlo. Se il file fosse già presente, verrà modificato con l'aggiunta della entry corretta per evitare il controllo.

Maggiori informazioni e approfondimenti:

Francesco Poli
Senior Support Engineer
Microsoft Enterprise Exchange Support