Cara: Meningkatkan Waktu Startup dari Aplikasi Klien WCF menggunakan XmlSerializer

Aplikasi layanan dan klien yang menggunakan jenis data yang dapat diserialisasikan menggunakan XmlSerializer membuat dan mengompilasi kode serialisasi untuk jenis data tersebut pada durasi, yang dapat menghasilkan performa start-up yang lambat.

Catatan

Kode serialisasi yang dibuat sebelumnya hanya dapat digunakan dalam aplikasi klien dan tidak dapat digunakan dalam layanan.

Alat Utilitas Metadata ServiceModel (Svcutil.exe) dapat meningkatkan performa start-up untuk aplikasi ini dengan menghasilkan kode serialisasi yang diperlukan dari assembly yang dikompilasi untuk aplikasi. Svcutil.exe menghasilkan kode serialisasi untuk semua jenis data yang digunakan dalam kontrak layanan dalam rakitan aplikasi yang dikompilasi yang dapat diserialisasikan menggunakan XmlSerializer. Kontrak layanan dan operasi yang menggunakan XmlSerializer ditandai dengan XmlSerializerFormatAttribute.

Untuk menghasilkan kode serialisasi XmlSerializer

  1. Kompilasi layanan atau kode klien Anda ke dalam satu atau beberapa rakitan.

  2. Buka perintah SDK.

  3. Pada perintah, luncurkan alat Svcutil.exe menggunakan format berikut.

    svcutil.exe /t:xmlSerializer  <assemblyPath>*  
    

    Argumen assemblyPath menentukan jalur ke assembly yang berisi jenis kontrak layanan. Svcutil.exe menghasilkan kode serialisasi untuk semua jenis data yang digunakan dalam kontrak layanan dalam rakitan aplikasi yang dikompilasi yang dapat diserialisasikan menggunakan XmlSerializer.

    Svcutil.exe hanya dapat menghasilkan kode serialisasi C#. Satu file kode sumber dihasilkan untuk setiap rakitan input. Anda tidak dapat menggunakan sakelar /language untuk mengubah bahasa kode yang dihasilkan.

    Untuk menentukan jalur ke rakitan dependen, gunakan opsi /reference.

  4. Buat kode serialisasi yang dihasilkan tersedia untuk aplikasi Anda dengan menggunakan salah satu opsi berikut:

    1. Kompilasi kode serialisasi yang dihasilkan ke dalam rakitan terpisah dengan nama [rakitan asli].XmlSerializers.dll (misalnya, MyApp.XmlSerializers.dll). Aplikasi Anda harus dapat memuat assembly, yang harus ditandatangani dengan kunci yang sama dengan assembly asli. Jika Anda mengombinasikan ulang rakitan asli, Anda harus meregenerasi rakitan serialisasi.

    2. Kompilasi kode serialisasi yang dihasilkan ke dalam rakitan terpisah dan gunakan XmlSerializerAssemblyAttribute pada kontrak layanan yang menggunakan XmlSerializerFormatAttribute. Atur properti AssemblyName atau CodeBase untuk menunjuk ke rakitan serialisasi yang dikompilasi.

    3. Kompilasi kode serialisasi yang dihasilkan ke dalam rakitan aplikasi Anda dan tambahkan XmlSerializerAssemblyAttribute ke kontrak layanan yang menggunakan XmlSerializerFormatAttribute. Jangan atur properti AssemblyName atau CodeBase. Rakitan serialisasi default diasumsikan sebagai rakitan saat ini.

Untuk menghasilkan kode serialisasi XmlSerializer di Visual Studio

  1. Buat layanan WCF dan proyek klien di Visual Studio. Kemudian, tambahkan referensi layanan ke proyek klien.

  2. Tambahkan XmlSerializerFormatAttribute ke kontrak layanan dalam file reference.cs di proyek aplikasi klien di bawah serviceReference ->reference.svcmap. Perhatikan bahwa Anda perlu menampilkan semua file di Penjelajah Solusi untuk melihat file-file ini.

  3. Buat aplikasi klien.

  4. Gunakan ServiceModel Metadata Utility Tool (Svcutil.exe) untuk membuat file .cs serializer yang telah dibuat sebelumnya dengan menggunakan perintah :

    svcutil.exe /t:xmlSerializer  <assemblyPath>*  
    

    Argumen assemblyPath menentukan jalur ke rakitan klien WCF.

    Seperti:

    svcutil.exe /t:xmlSerializer wcfclient.exe  
    

    File WCFClient.XmlSerializers.dll.cs akan dibuat.

  5. Kompilasi rakitan serialisasi yang telah dibuat sebelumnya.

    Berdasarkan contoh di langkah sebelumnya, perintah kompilasi adalah sebagai berikut:

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

    Pastikan WCFClient.XmlSerializers.dll yang dihasilkan berada dalam direktori yang sama dengan aplikasi klien, yang WCFClient.exe dalam hal ini.

  6. Jalankan aplikasi klien seperti biasa. Rakitan serialisasi yang telah dibuat sebelumnya akan digunakan.

Contoh

Perintah berikut menghasilkan jenis serialisasi untuk jenis XmlSerializer yang digunakan kontrak layanan apa pun dalam rakitan.

svcutil /t:xmlserializer myContractLibrary.exe  

Lihat juga