Procedura: migliorare il tempo di avvio di applicazioni client WCF utilizzando XmlSerializer
I servizi e le applicazioni client che utilizzano tipi di dati serializzabili tramite XmlSerializer generano e compilano il codice di serializzazione per tali dati in fase di esecuzione, il che può rallentare le prestazioni all'avvio.
Nota
Un codice di serializzazione pregenerato può essere utilizzato solamente nelle applicazioni client e non nei servizi.
ServiceModel Metadata Utility Tool (Svcutil.exe) può migliorare le prestazioni all'avvio per queste applicazioni generando il codice di serializzazione necessario dagli assembly compilati per l'applicazione. Svcutil.exe genera codice di serializzazione per tutti i tipi di dati utilizzati nei contratti di servizio nell'assembly dell'applicazione compilata che può essere serializzato utilizzando XmlSerializer. I contratti del servizio e dell'operazione che utilizzano XmlSerializer sono contrassegnati con XmlSerializerFormatAttribute.
Per generare il codice di serializzazione XmlSerializer
Compilare il codice del servizio o del client in uno o più assembly.
Aprire un prompt dei comandi SDK.
Al prompt dei comandi, avviare lo strumento Svcutil.exe utilizzando il formato seguente.
svcutil.exe /t:xmlSerializer <assemblyPath>*
L'argomento
assemblyPath
specifica il percorso di un assembly che contiene tipi di contratto di servizio. Svcutil.exe genera codice di serializzazione per tutti i tipi di dati utilizzati nei contratti di servizio nell'assembly dell'applicazione compilata che può essere serializzato utilizzando XmlSerializer.Svcutil.exe può generare solo codice di serializzazione C#. Viene generato un file di codice sorgente per ogni assembly di input. Non è possibile utilizzare l'opzione /language per cambiare il linguaggio del codice generato.
Per specificare il percorso di assembly dipendenti, utilizzare l'opzione /reference.
Rendere il codice di serializzazione generato disponibile all'applicazione utilizzando una delle opzioni seguenti:
- Compilare il codice di serializzazione generato in un assembly separato con il nome [assembly originale] .XmlSerializers .dll, ad esempio, MyApp.XmlSerializers.dll. L'applicazione deve essere in grado di caricare l'assembly che deve essere firmato con la stessa chiave dell'assembly originale. Se si ricompila l'assembly originale, è necessario rigenerare l'assembly di serializzazione.
- Compilare il codice di serializzazione generato in un assembly separato e utilizzare XmlSerializerAssemblyAttribute sul contratto di servizio che utilizza XmlSerializerFormatAttribute. Impostare le proprietà AssemblyName o CodeBase per puntare all'assembly di serializzazione compilato.
- Compilare il codice di serializzazione generato nell'assembly dell'applicazione e aggiungere XmlSerializerAssemblyAttribute al contratto di servizio che utilizza XmlSerializerFormatAttribute. Non impostare le proprietà AssemblyName o CodeBase. L'assembly corrente viene considerato automaticamente l'assembly di serializzazione predefinito.
Esempio
Nel comando seguente vengono generati i tipi di serializzazione per i tipi XmlSerializer utilizzati da qualsiasi contratto di servizio nell'assembly.
svcutil /t:xmlserializer myContractLibrary.exe