Dela via


Använda dotnet-svcutil.xmlserializer på .NET Core

dotnet-svcutil.xmlserializer NuGet-paketet kan förgenerera en serialiseringssammansättning för .NET Core-projekt. Den genererar C#-serialiseringskod för de typer i klientprogrammet som används av WCF-tjänstkontraktet och som kan serialiseras av XmlSerializer. Detta förbättrar startprestandan för XML-serialisering vid serialisering eller deserialisering av objekt av dessa typer.

Förutsättningar

Du kan använda kommandot dotnet --info för att kontrollera vilka versioner av .NET SDK och körning som du redan har installerat.

Komma igång

Så här använder dotnet-svcutil.xmlserializer du i ett .NET Core-konsolprogram:

  1. Skapa en WCF-tjänst med namnet "MyWCFService" med standardmallen "WCF Service Application" i .NET Framework. Lägg till [XmlSerializerFormat] attribut för tjänstmetoden på följande sätt:

     [ServiceContract]
     public interface IService1
     {
         [XmlSerializerFormat]
         [OperationContract(Action = "http://tempuri.org/IService1/GetData", ReplyAction = "http://tempuri.org/IService1/GetDataResponse")]
         string GetData(int value);
     }
    
  2. Skapa ett .NET Core-konsolprogram som WCF-klientprogram som är avsett för .NET Core 2.1 eller senare versioner. Skapa till exempel en app med namnet "MyWCFClient" med följande kommando:

    dotnet new console --name MyWCFClient
    

    Kontrollera xml-elementet i projektfilen för att se till att projektet riktar sig mot .NET Core 2.1 eller senare TargetFramework :

    <TargetFramework>netcoreapp2.1</TargetFramework>
    
  3. Lägg till en paketreferens till genom att System.ServiceModel.Http köra följande kommando:

    dotnet add package System.ServiceModel.Http
    
  4. Lägg till WCF-klientkoden:

    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);
    }
    
  5. Lägg till en referens till paketet genom att dotnet-svcutil.xmlserializer köra följande kommando:

    dotnet add package dotnet-svcutil.xmlserializer
    

    Om du kör kommandot bör du lägga till en post i projektfilen som liknar den här:

    <ItemGroup>
      <DotNetCliToolReference Include="dotnet-svcutil.xmlserializer" Version="1.0.0" />
    </ItemGroup>
    
  6. Skapa programmet genom att köra dotnet build. Om allt lyckas genereras en sammansättning med namnet MyWCFClient.XmlSerializers.dll i utdatamappen. Om verktyget inte kunde generera sammansättningen visas varningar i kompileringsutdata.

  7. Starta WCF-tjänsten genom att till exempel köra http://localhost:2561/Service1.svc i webbläsaren. Starta sedan klientprogrammet så läses det in automatiskt och använder de förgenererade serialiserarna vid körning.