Gewusst wie: 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.

Tipp

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

Das ServiceModel Metadata Utility Tool (Svcutil.exe) kann die Startleistung für diese 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 [ursprüngliche 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.

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

Weitere Ressourcen

ServiceModel Metadata Utility Tool (Svcutil.exe)