Vorgehensweise: Verbessern der Startzeit von WCF-Clientanwendungen mit dem XmlSerializer

Dienste und Clientanwendungen, die Datentypen verwenden, die mit dem XmlSerializer serialisiert werden können, generieren und kompilieren für diese Datentypen während der Laufzeit Code, was zu einem verlangsamten Start führen kann.

Hinweis

Vorab generierter Serialisierungscode kann nur in Clientanwendungen verwendet werden und nicht in Diensten.

Mithilfe des ServiceModel Metadata Utility-Tools (Svcutil.exe) lässt sich die Startleistung dieser Anwendungen verbessern, indem der erforderliche Serialisierungscode aus den kompilierten Assemblys für die Anwendung generiert wird. Svcutil.exe generiert Serialisierungscode für alle Datentypen, die in Dienstverträgen in der kompilierten Anwendungsassembly verwendet werden und die mit XmlSerializer serialisiert werden können. Dienst- und Vorgangsverträge, die XmlSerializer verwenden, werden mit XmlSerializerFormatAttribute gekennzeichnet.

So generieren Sie XmlSerializer-Serialisierungscode

  1. Kompilieren Sie den Dienst- oder Clientcode in eine oder mehrere Assemblys.

  2. Öffnen Sie eine SDK-Eingabeaufforderung.

  3. Starten Sie das Tool Svcutil.exe an der Eingabeaufforderung mit dem folgenden Format.

    svcutil.exe /t:xmlSerializer  <assemblyPath>*  
    

    Das assemblyPath-Argument gibt den Pfad zu einer Assembly an, die Dienstvertragstypen enthält. Svcutil.exe generiert Serialisierungscode für alle Datentypen, die in Dienstverträgen in der kompilierten Anwendungsassembly verwendet werden und die mit XmlSerializer serialisiert werden können.

    Svcutil.exe kann lediglich C#-Serialisierungscode generieren. Für jede Eingabeassembly wird eine Quellcodedatei generiert. Sie können den Schalter /language nicht verwenden, um die Sprache des generierten Codes zu ändern.

    Den Pfad für abhängige Assemblys geben Sie mit der Option /reference an.

  4. Machen Sie den generierten Serialisierungscode für Ihre Anwendung verfügbar, indem Sie eine der folgenden Optionen verwenden:

    1. Kompilieren Sie den generierten Serialisierungscode in einer separaten Assembly mit der Bezeichnung [original assembly].XmlSerializers.dll (z.B. MyApp.XmlSerializers.dll). Ihre Anwendung muss die Assembly laden können. Diese wiederum muss mit demselben Schlüssel wie die ursprüngliche Assembly signiert werden. Falls Sie die ursprüngliche Assembly neu kompilieren, müssen Sie die Serialisierungsassembly neu generieren.

    2. Kompilieren Sie den generierten Serialisierungscode in eine separate Assembly, und verwenden Sie XmlSerializerAssemblyAttribute in dem Dienstvertrag, der XmlSerializerFormatAttribute verwendet. Legen Sie die AssemblyName-Eigenschaft oder die CodeBase-Eigenschaft so fest, dass sie auf die kompilierte Serialisierungsassembly verweist.

    3. Kompilieren Sie den generierten Serialisierungscode in Ihre Anwendungsassembly, und fügen Sie XmlSerializerAssemblyAttribute dem Dienstvertrag hinzu, der XmlSerializerFormatAttribute verwendet. Die AssemblyName-Eigenschaft und die CodeBase-Eigenschaft müssen nicht festgelegt werden. Es wird davon ausgegangen, dass die Standardserialisierungsassembly die aktuelle Assembly ist.

So erzeugen Sie in Visual Studio XmlSerializer-Serialisierungscode

  1. Erstellen Sie die WCF-Dienst- und Clientprojekte in Visual Studio. Fügen Sie dann dem Clientprojekt einen Dienstverweis hinzu.

  2. Fügen Sie dem Dienstvertrag in der Datei XmlSerializerFormatAttributereference.cs im Client-App-Projekt unter serviceReference ->reference.svcmap einen hinzu. Beachten Sie, dass Sie alle Dateien in Projektmappen-Explorer anzeigen müssen, um diese Dateien anzuzeigen.

  3. Erstellen Sie die Client-App.

  4. Verwenden Sie das ServiceModel Metadata Utility Tool (Svcutil.exe), um eine vorab generierte .cs-Serialisierungsdatei mit dem Befehl zu erstellen:

    svcutil.exe /t:xmlSerializer  <assemblyPath>*  
    

    Das assemblyPath-Argument gibt den Pfad zur WCF-Clientassembly an.

    Also beispielsweise:

    svcutil.exe /t:xmlSerializer wcfclient.exe  
    

    Die DateiWCFClient.XmlSerializers.dll.cs wird generiert.

  5. Die generierte Serialisierungsassembly.

    Basierend auf dem Beispiel im vorherigen Schritt lautet der Kompilierbefehl wie folgt:

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

    Stellen Sie sicher, dass sich die generierte WCFClient.XmlSerializers.dll im selben Verzeichnis wie die Client-App befindet, die in diesem Fall WCFClient.exe ist.

  6. Führen Sie die Client-App wie gewohnt aus. Es wird die vorgenerierte Serialisierungsassembly verwendet.

Beispiel

Der folgende Befehl generiert Serialisierungstypen für XmlSerializer-Typen, die von Dienstverträgen in der Assembly verwendet werden.

svcutil /t:xmlserializer myContractLibrary.exe  

Siehe auch