Condividi tramite


Procedura: Migliorare il tempo di avvio delle applicazioni client WCF tramite XmlSerializer

Servizi e applicazioni client che utilizzano tipi di dati serializzabili tramite il XmlSerializer generano e compilano codice di serializzazione per tali tipi di dati al runtime, il che può provocare un rallentamento delle prestazioni di avvio.

Annotazioni

Il codice di serializzazione pregenerato può essere usato solo nelle applicazioni client e non nei servizi.

Lo strumento Utilità metadati ServiceModel (Svcutil.exe) può migliorare le prestazioni di 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 compilato che possono essere serializzati utilizzando il XmlSerializer. I contratti di servizio e operativi che usano il XmlSerializer sono contrassegnati con il XmlSerializerFormatAttribute.

Per generare codice di serializzazione XmlSerializer

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

  2. Aprire un prompt dei comandi dell'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 usati nei contratti di servizio nell'assembly dell'applicazione compilato, 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 modificare la lingua del codice generato.

    Per indicare il percorso degli assembly dipendenti, usare l'opzione /reference.

  4. Rendere il codice di serializzazione generato disponibile per l'applicazione usando una delle opzioni seguenti:

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

    2. Compilare il codice di serializzazione generato in un assembly separato e usare il XmlSerializerAssemblyAttribute nel contratto di servizio che utilizza il XmlSerializerFormatAttribute. Impostare le proprietà AssemblyName o CodeBase in modo che puntino all'assembly di serializzazione compilato.

    3. Compila il codice di serializzazione generato nell'assembly della tua applicazione e aggiungi il XmlSerializerAssemblyAttribute al contratto di servizio che usa il XmlSerializerFormatAttribute. Non impostare le proprietà AssemblyName o CodeBase. Si presuppone che l'assembly di serializzazione predefinito sia l'assembly corrente.

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 XmlSerializerFormatAttribute al contratto di servizio nel file reference.cs nel progetto dell'app client sotto 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 l'utilità dello strumento metadati ServiceModel (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 fileWCFClient.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 WCFClient.XmlSerializers.dll generato si trova nella stessa directory dell'app client, che in questo caso è WCFClient.exe .

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

Example

Il comando seguente genera i tipi di serializzazione per i tipi XmlSerializer usati da qualsiasi contratto di servizio nell'assembly.

svcutil /t:xmlserializer myContractLibrary.exe

Vedere anche