Utiliser dotnet-svcutil.xmlserializer sur .NET Core
Le package NuGet dotnet-svcutil.xmlserializer
peut prégénérer un assembly de sérialisation pour les projets .NET Core. Il prégénère un code de sérialisation C# pour les types dans l’application cliente qui sont utilisés par le contrat de service WCF et qui peuvent être sérialisés par XmlSerializer. Cela améliore les performances de démarrage de la sérialisation XML lors de la sérialisation ou de la désérialisation de ces types d’objets.
Prérequis
- SDK .NET Core 2.1 ou version ultérieure
- Votre éditeur de code favori
Vous pouvez utiliser la commande dotnet --info
pour savoir quelles versions du runtime et du Kit de développement logiciel (SDK) .NET Core sont déjà installées.
Prise en main
Pour utiliser dotnet-svcutil.xmlserializer
dans une application console .NET Core :
Créez un service WCF nommé « MyWCFService » selon le modèle par défaut « WCF Service Application » dans .NET Framework. Ajoutez l’attribut
[XmlSerializerFormat]
sur la méthode de service :[ServiceContract] public interface IService1 { [XmlSerializerFormat] [OperationContract(Action = "http://tempuri.org/IService1/GetData", ReplyAction = "http://tempuri.org/IService1/GetDataResponse")] string GetData(int value); }
créez une application console .NET Core comme application cliente WCF ciblant .NET Core 2.1 ou versions ultérieures. Par exemple, créez une application nommée 'MyWCFClient' avec la commande suivante :
dotnet new console --name MyWCFClient
Pour garantir que votre projet cible .NET Core 2.1 ou version ultérieure, inspectez l’élément XML
TargetFramework
dans votre fichier projet :<TargetFramework>netcoreapp2.1</TargetFramework>
Ajoutez une référence de package à
System.ServiceModel.Http
en exécutant la commande suivante :dotnet add package System.ServiceModel.Http
Ajoutez le code du client WCF :
using System.ServiceModel; class Program { static void Main(string[] args) { var myBinding = new BasicHttpBinding(); var myEndpoint = new EndpointAddress("http://localhost:2561/Service1.svc"); //Fill your service url here var myChannelFactory = new ChannelFactory<IService1>(myBinding, myEndpoint); IService1 client = myChannelFactory.CreateChannel(); string s = client.GetData(1); ((ICommunicationObject)client).Close(); } } [ServiceContract] public interface IService1 { [XmlSerializerFormat] [OperationContract(Action = "http://tempuri.org/IService1/GetData", ReplyAction = "http://tempuri.org/IService1/GetDataResponse")] string GetData(int value); }
Ajoutez une référence au package
dotnet-svcutil.xmlserializer
en exécutant la commande suivante :dotnet add package dotnet-svcutil.xmlserializer
L’exécution de la commande doit ajouter à votre fichier projet une entrée similaire à ceci :
<ItemGroup> <DotNetCliToolReference Include="dotnet-svcutil.xmlserializer" Version="1.0.0" /> </ItemGroup>
Générez l’application en exécutant
dotnet build
. Si tout fonctionne, un assembly nommé MyWCFClient.XmlSerializers.dll est généré dans le dossier de sortie. Si l’outil n’est pas parvenu à générer l’assembly, des avertissements s’affichent dans la sortie de build.Démarrez le service WCF, par exemple, en exécutant
http://localhost:2561/Service1.svc
dans le navigateur. Démarrez ensuite l’application cliente qui chargera et utilisera automatiquement les sérialiseurs prégénérés au moment de l’exécution.