Vorgehensweise: Verbessern der Startzeit von WCF-Clientanwendungen mit dem XmlSerializerHow to: Improve the Startup Time of WCF Client Applications using the 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.Services and client applications that use data types that are serializable using the XmlSerializer generate and compile serialization code for those data types at runtime, which can result in slow start-up performance.

Hinweis

Vorab generierter Serialisierungscode kann nur in Clientanwendungen verwendet werden und nicht in Diensten.Pre-generated serialization code can only be used in client applications and not in services.

Die ServiceModel Metadata Utility Tool (Svcutil.exe) können startleistung für diese Anwendungen durch Generieren der erforderlichen Serialisierungscode aus den kompilierten Assemblys für die Anwendung zu verbessern.The ServiceModel Metadata Utility Tool (Svcutil.exe) can improve start-up performance for these applications by generating the necessary serialization code from the compiled assemblies for the application. 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 generates serialization code for all data types used in service contracts in the compiled application assembly that can be serialized using the XmlSerializer. Dienst- und Vorgangsverträge, die XmlSerializer verwenden, werden mit XmlSerializerFormatAttribute gekennzeichnet.Service and operation contracts that use the XmlSerializer are marked with the XmlSerializerFormatAttribute.

So generieren Sie XmlSerializer-SerialisierungscodeTo generate XmlSerializer serialization code

  1. Kompilieren Sie den Dienst- oder Clientcode in eine oder mehrere Assemblys.Compile your service or client code into one or more assemblies.

  2. Öffnen Sie eine SDK-Eingabeaufforderung.Open an SDK command prompt.

  3. Starten Sie das Tool Svcutil.exe an der Eingabeaufforderung mit dem folgenden Format.At the command prompt, launch the Svcutil.exe tool using the following format.

    svcutil.exe /t:xmlSerializer  <assemblyPath>*  
    

    Das assemblyPath-Argument gibt den Pfad zu einer Assembly an, die Dienstvertragstypen enthält.The assemblyPath argument specifies the path to an assembly that contains service contract types. 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 generates serialization code for all data types used in service contracts in the compiled application assembly that can be serialized using the XmlSerializer.

    Svcutil.exe kann lediglich C#-Serialisierungscode generieren.Svcutil.exe can only generate C# serialization code. Für jede Eingabeassembly wird eine Quellcodedatei generiert.One source code file is generated for each input assembly. Sie können keine der /Language Switch so ändern Sie die Sprache des generierten Codes.You cannot use the /language switch to change the language of the generated code.

    Um den Pfad für abhängige Assemblys anzugeben, verwenden die /reference Option.To specify the path to dependent assemblies, use the /reference option.

  4. Machen Sie den generierten Serialisierungscode für Ihre Anwendung verfügbar, indem Sie eine der folgenden Optionen verwenden:Make the generated serialization code available to your application by using one of the following options:

    1. Kompilieren Sie den generierten Serialisierungscode in einer separaten Assembly mit dem Namen [ursprüngliche Assembly]. XmlSerializers.dll (z. B. MyApp.XmlSerializers.dll).Compile the generated serialization code into a separate assembly with the name [original assembly].XmlSerializers.dll (for example, 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.Your application must be able to load the assembly, which must be signed with the same key as the original assembly. Falls Sie die ursprüngliche Assembly neu kompilieren, müssen Sie die Serialisierungsassembly neu generieren.If you recompile the original assembly, you must regenerate the serialization assembly.

    2. Kompilieren Sie den generierten Serialisierungscode in eine separate Assembly, und verwenden Sie XmlSerializerAssemblyAttribute in dem Dienstvertrag, der XmlSerializerFormatAttribute verwendet.Compile the generated serialization code into a separate assembly and use the XmlSerializerAssemblyAttribute on the service contract that uses the XmlSerializerFormatAttribute. Legen Sie die AssemblyName-Eigenschaft oder die CodeBase-Eigenschaft so fest, dass sie auf die kompilierte Serialisierungsassembly verweist.Set the AssemblyName or CodeBase properties to point to the compiled serialization assembly.

    3. Kompilieren Sie den generierten Serialisierungscode in Ihre Anwendungsassembly, und fügen Sie XmlSerializerAssemblyAttribute dem Dienstvertrag hinzu, der XmlSerializerFormatAttribute verwendet.Compile the generated serialization code into your application assembly and add the XmlSerializerAssemblyAttribute to the service contract that uses the XmlSerializerFormatAttribute. Die AssemblyName-Eigenschaft und die CodeBase-Eigenschaft müssen nicht festgelegt werden.Do not set the AssemblyName or CodeBase properties. Es wird davon ausgegangen, dass die Standardserialisierungsassembly die aktuelle Assembly ist.The default serialization assembly is assumed to be the current assembly.

Zum Generieren von XmlSerializer-Serialisierungscode in Visual StudioTo generate XmlSerializer serialization code in Visual Studio

  1. Erstellen Sie die WCF-Dienst und Client Projekte in Visual Studio.Create the WCF service and client projects in Visual Studio. Anschließend fügen Sie einen Dienstverweis auf das Clientprojekt hinzu.Then, add a service reference to the client project.

  2. Hinzufügen einer XmlSerializerFormatAttribute auf den Dienstvertrag in der reference.cs Datei im Client-app-Projekt unter ServiceReference -> "Reference.SVCMAP" .Add an XmlSerializerFormatAttribute to the service contract in the reference.cs file in the client app project under serviceReference -> reference.svcmap. Beachten Sie, dass Sie alle Dateien in anzeigen müssen Projektmappen-Explorer auf diese Dateien finden Sie unter.Note that you need to show all files in Solution Explorer to see these files.

  3. Erstellen Sie die Client-app.Build the client app.

  4. Verwenden der ServiceModel Metadata Utility Tool (Svcutil.exe) zum Erstellen eines Serialisierungsprogramms vorgenerierten cs Datei mithilfe des Befehls:Use the ServiceModel Metadata Utility Tool (Svcutil.exe) to create a pre-generated serializer .cs file by using the command:

    svcutil.exe /t:xmlSerializer  <assemblyPath>*  
    

    Das AssemblyPath-Argument gibt den Pfad zu den WCF-Clientassembly.The assemblyPath argument specifies the path to the WCF client assembly.

    Als:Such as:

    svcutil.exe /t:xmlSerializer wcfclient.exe  
    

    Die WCFClient.XmlSerializers.dll.cs Datei generiert werden.The WCFClient.XmlSerializers.dll.cs file will be generated.

  5. Kompilieren Sie die vorgenerierten Serialisierungsassembly.Compile the pre-generated serialization assembly.

    Basierend auf dem Beispiel im vorherigen Schritt, würde der Compile-Befehl kann Folgendes sein:Based on the example in the previous step, the compile command would be the following:

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

    Stellen Sie sicher, dass die generierte WCFClient.XmlSerializers.dll befindet sich im selben Verzeichnis wie die Client-app ist WCFClient.exe in diesem Fall.Make sure the generated WCFClient.XmlSerializers.dll is in the same directory as the client app, which is WCFClient.exe in this case.

  6. Führen Sie die Client-app wie gewohnt.Run the client app as usual. Der vorgenerierten Serialisierungsassembly wird verwendet.The pre-generated serialization assembly will be used.

BeispielExample

Der folgende Befehl generiert Serialisierungstypen für XmlSerializer-Typen, die von Dienstverträgen in der Assembly verwendet werden.The following command generates serialization types for XmlSerializer types that any service contracts in the assembly use.

svcutil /t:xmlserializer myContractLibrary.exe  

Siehe auchSee Also

ServiceModel Metadata Utility-Tool (Svcutil.exe)ServiceModel Metadata Utility Tool (Svcutil.exe)