Delen via


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

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:

  1. 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);
     }
    
  2. 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>
    
  3. Voeg een pakketreferentie toe door de volgende opdracht uit te System.ServiceModel.Http voeren:

    dotnet add package System.ServiceModel.Http
    
  4. 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);
    }
    
  5. 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>
    
  6. 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.

  7. 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.