Procedura: migliorare il tempo di avvio di applicazioni client WCF usando 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.

Lo strumento ServiceModel Metadata Utility (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

  1. Compilare il codice del servizio o del client in uno o più assembly.

  2. Aprire un prompt dei comandi SDK.

  3. Al prompt dei comandi, avviare lo strumento Svcutil.exe usando 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 usare l'opzione /language per cambiare il linguaggio del codice generato.

    Per specificare il percorso di assembly dipendenti, usare l'opzione /reference.

  4. Rendere il codice di serializzazione generato disponibile all'applicazione utilizzando una delle opzioni seguenti:

    1. Compilare il codice di serializzazione generato in un assembly separato con il nome [original assembly].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.

    2. 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.

    3. 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.

Per generare codice di serializzazione XmlSerializer in Visual Studio

  1. Creare il servizio WCF e i progetti client in Visual Studio. Aggiungere quindi un riferimento al servizio al progetto client.

  2. Aggiungere un oggetto XmlSerializerFormatAttribute al contratto di servizio nel file reference.cs nel progetto dell'app client in serviceReference ->reference.svcmap. Si noti che è necessario visualizzare tutti i file in Esplora soluzioni per visualizzare questi file.

  3. Compilare l'app client.

  4. Usare lo strumento ServiceModel Metadata Utility (Svcutil.exe) per creare un file di serializzatore pregenerato .cs usando il comando:

    svcutil.exe /t:xmlSerializer  <assemblyPath>*  
    

    L'argomento assemblyPath specifica il percorso dell'assembly client WCF.

    Ad esempio:

    svcutil.exe /t:xmlSerializer wcfclient.exe  
    

    Verrà generato il file WCFClient.XmlSerializers.dll.cs.

  5. Compilare l'assembly di serializzazione pregenerato.

    In base all'esempio nel passaggio precedente, il comando di compilazione sarà il seguente:

    csc /r:wcfclient.exe /out:WCFClient.XmlSerializers.dll /t:library WCFClient.XmlSerializers.dll.cs  
    

    Assicurarsi che il file WCFClient.XmlSerializers.dll generato si trova nella stessa directory dell'app client, WCFClient.exe in questo caso.

  6. Eseguire l'app client come di consueto. Verrà usato l'assembly di serializzazione pregenerato.

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  

Vedi anche