Dotnet-svcutil.xmlserializer gebruiken op .NET Core
Het dotnet-svcutil.xmlserializer
NuGet-pakket kan vooraf een serialisatieassembly genereren voor .NET Core-projecten. Er wordt vooraf C#-serialisatiecode gegenereerd voor de typen in de clienttoepassing die worden gebruikt door het WCF-servicecontract en die kunnen worden geserialiseerd door de XmlSerializer. Dit verbetert de opstartprestaties van XML-serialisatie bij het serialiseren of deserialiseren van objecten van deze typen.
Vereisten
- .NET Core 2.1 SDK of hoger
- Uw favoriete code-editor
U kunt de opdracht dotnet --info
gebruiken om te controleren welke versies van .NET SDK en runtime u al hebt geïnstalleerd.
Aan de slag
Ga als volgende te werk om te gebruiken dotnet-svcutil.xmlserializer
in een .NET Core-consoletoepassing:
Maak een WCF-service met de naam MyWCFService met behulp van de standaardsjabloon WCF-servicetoepassing in .NET Framework. Voeg een kenmerk toe
[XmlSerializerFormat]
aan de servicemethode, zoals hieronder:[ServiceContract] public interface IService1 { [XmlSerializerFormat] [OperationContract(Action = "http://tempuri.org/IService1/GetData", ReplyAction = "http://tempuri.org/IService1/GetDataResponse")] string GetData(int value); }
Maak een .NET Core-consoletoepassing als WCF-clienttoepassing die gericht is op .NET Core 2.1 of hoger. Maak bijvoorbeeld een app met de naam 'MyWCFClient' met de volgende opdracht:
dotnet new console --name MyWCFClient
Controleer het
TargetFramework
XML-element in het projectbestand om ervoor te zorgen dat uw project is gericht op .NET Core 2.1 of hoger:<TargetFramework>netcoreapp2.1</TargetFramework>
Voeg een pakketreferentie toe door de volgende opdracht uit te
System.ServiceModel.Http
voeren:dotnet add package System.ServiceModel.Http
Voeg de WCF-clientcode toe:
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); }
Voeg een verwijzing naar het
dotnet-svcutil.xmlserializer
pakket toe door de volgende opdracht uit te voeren:dotnet add package dotnet-svcutil.xmlserializer
Als u de opdracht uitvoert, moet u een vermelding toevoegen aan het projectbestand dat er ongeveer als volgt uit ziet:
<ItemGroup> <DotNetCliToolReference Include="dotnet-svcutil.xmlserializer" Version="1.0.0" /> </ItemGroup>
Bouw de toepassing door deze uit te voeren
dotnet build
. Als alles slaagt, wordt er een assembly met de naam MyWCFClient.XmlSerializers.dll gegenereerd in de uitvoermap. Als het hulpprogramma de assembly niet kan genereren, ziet u waarschuwingen in de build-uitvoer.Start de WCF-service door bijvoorbeeld in de browser uit te voeren
http://localhost:2561/Service1.svc
. Start vervolgens de clienttoepassing en laadt automatisch de vooraf gegenereerde serializers tijdens runtime.