Procédure : améliorer le délai de démarrage des applications clientes WCF à l’aide de XmlSerializer

Les applications clientes et de services qui utilisent des types de données sérialisables à l'aide de XmlSerializer génèrent et compilent le code de sérialisation de ces types de données lors de l'exécution, ce qui peut provoquer des performances de démarrage lentes.

Notes

Le code de sérialisation prégénéré est réservé aux applications clientes, pas aux services.

L’outil ServiceModel Metadata Utility Tool (Svcutil.exe) peut améliorer les performances de démarrage de ces applications en générant le code de sérialisation nécessaire à partir des assemblys compilés pour l’application. Svcutil.exe génère le code de sérialisation de tous les types de données utilisés dans les contrats de service de l'assembly d'application compilé qui peut être sérialisé à l'aide de XmlSerializer. Les contrats de service et d'opération qui utilisent XmlSerializer sont marqués avec XmlSerializerFormatAttribute.

Pour générer du code de sérialisation XmlSerializer.

  1. Compilez votre code de service ou client dans un ou plusieurs assemblys.

  2. Ouvrez une invite de commandes du Kit de développement SDK.

  3. À l'invite de commandes, lancez l'outil Svcutil.exe à l'aide du format suivant.

    svcutil.exe /t:xmlSerializer  <assemblyPath>*  
    

    L'argument assemblyPath spécifie le chemin d'accès à un assembly contenant des types de contrat de service. Svcutil.exe génère le code de sérialisation de tous les types de données utilisés dans les contrats de service de l'assembly d'application compilé qui peut être sérialisé à l'aide de XmlSerializer.

    Svcutil.exe peut uniquement générer du code de sérialisation C#. Un fichier de code source est généré pour chaque assembly d'entrée. Vous ne pouvez pas utiliser le commutateur /language pour changer le langage du code généré.

    Pour spécifier le chemin des assemblys dépendants, utilisez l'option /reference.

  4. Rendez le code de sérialisation généré disponible pour votre application en utilisant l'une des options suivantes :

    1. Compilez le code de sérialisation généré dans un assembly séparé portant le nom [assembly d'origine].XmlSerializers .dll (par exemple, MyApp.XmlSerializers.dll). Votre application doit être en mesure de charger l'assembly, qui doit être signé avec la même clé que l'assembly d'origine. Si vous recompilez l'assembly d'origine, vous devez régénérer l'assembly de sérialisation.

    2. Compilez le code de sérialisation généré dans un assembly distinct et utilisez XmlSerializerAssemblyAttribute sur le contrat de service qui utilise XmlSerializerFormatAttribute. Définissez les propriétés AssemblyName ou CodeBase pour pointer vers l'assembly de sérialisation compilé.

    3. Compilez le code de sérialisation généré dans votre assembly d'application et ajoutez XmlSerializerAssemblyAttribute au contrat de service qui utilise XmlSerializerFormatAttribute. Ne définissez pas les propriétés AssemblyName ou CodeBase. L'assembly de sérialisation par défaut est supposé être l'assembly actuel.

Pour générer du code de sérialisation XmlSerializer dans Visual Studio

  1. Créez le service WCF et les projets clients dans Visual Studio. Ajoutez ensuite une référence de service au projet client.

  2. Ajoutez un XmlSerializerFormatAttribute au contrat de service dans le fichier reference.cs dans le projet d’application client, sous serviceReference ->reference.svcmap. Notez que vous devez afficher tous les fichiers dans l’Explorateur de solutions pour voir ces fichiers.

  3. Générez l’application cliente.

  4. Utilisez l’outil ServiceModel Metadata Utility Tool (Svcutil.exe) pour créer un fichier sérialiseur prégénéré .cs à l’aide de la commande :

    svcutil.exe /t:xmlSerializer  <assemblyPath>*  
    

    L’argument assemblyPath spécifie le chemin de l’assembly client WCF.

    Par exemple :

    svcutil.exe /t:xmlSerializer wcfclient.exe  
    

    Le fichier WCFClient.XmlSerializers.dll.cs est généré.

  5. Compilez l’assembly de sérialisation prégénéré.

    Pour l’exemple de l’étape précédente, la commande de compilation est la suivante :

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

    Vérifiez que le fichier WCFClient.XmlSerializers.dll généré se trouve dans le même répertoire que l’application cliente, qui est WCFClient.exe ici.

  6. Exécutez l’application cliente comme d’habitude. L’assembly de sérialisation prégénéré sera utilisé.

Exemple

La commande suivante génère des types de sérialisation pour les types XmlSerializer que les contrats de service de l'assembly utilisent.

svcutil /t:xmlserializer myContractLibrary.exe  

Voir aussi