Freigeben über


Verwendung von „dotnet-svcutil.xmlserializer“ in .NET Core

Das dotnet-svcutil.xmlserializer NuGet-Paket kann eine Serialisierungsassembly für .NET Core-Projekte vorab generieren. Es generiert vorab C#-Serialisierungscode für die Typen in der Clientanwendung, die vom WCF-Dienstvertrag verwendet werden und die vom XmlSerializer serialisiert werden können. Dadurch wird die Startleistung der XML-Serialisierung beim Serialisieren oder Deserialisieren von Objekten dieser Typen verbessert.

Voraussetzungen

Mit dem Befehl dotnet --info können Sie überprüfen, welche Versionen von .NET SDK und Laufzeit bereits installiert sind.

Erste Schritte

Um dotnet-svcutil.xmlserializer in einer .NET Core-Konsolenanwendung zu verwenden:

  1. Erstellen Sie einen WCF-Dienst mit dem Namen "MyWCFService" mithilfe der Standardvorlage "WCF Service Application" in .NET Framework. Fügen Sie das [XmlSerializerFormat]-Attribut wie folgt zu der Dienstmethode hinzu:

     [ServiceContract]
     public interface IService1
     {
         [XmlSerializerFormat]
         [OperationContract(Action = "http://tempuri.org/IService1/GetData", ReplyAction = "http://tempuri.org/IService1/GetDataResponse")]
         string GetData(int value);
     }
    
  2. Erstellen Sie eine .NET Core-Konsolenanwendung als WCF-Clientanwendung, die auf .NET Core 2.1 oder höher ausgerichtet ist. Erstellen Sie beispielsweise eine App mit dem Namen "MyWCFClient" mit dem folgenden Befehl:

    dotnet new console --name MyWCFClient
    

    Um sicherzustellen, dass Ihr Projekt auf .NET Core 2.1 oder höher ausgerichtet ist, prüfen Sie das TargetFramework XML-Element in Ihrer Projektdatei:

    <TargetFramework>netcoreapp2.1</TargetFramework>
    
  3. Fügen Sie einen Paketverweis zu System.ServiceModel.Http hinzu, indem Sie den folgenden Befehl ausführen.

    dotnet add package System.ServiceModel.Http
    
  4. Fügen Sie den WCF-Clientcode hinzu:

    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. Fügen Sie einen Verweis auf das dotnet-svcutil.xmlserializer Paket hinzu, indem Sie den folgenden Befehl ausführen:

    dotnet add package dotnet-svcutil.xmlserializer
    

    Wenn Sie den Befehl ausführen, sollte der Projektdatei ein Eintrag wie folgt hinzugefügt werden:

    <ItemGroup>
      <DotNetCliToolReference Include="dotnet-svcutil.xmlserializer" Version="1.0.0" />
    </ItemGroup>
    
  6. Erstellen Sie die Anwendung durch Ausführen dotnet build. Wenn alles erfolgreich ist, wird eine Assembly mit dem Namen MyWCFClient.XmlSerializers.dll im Ausgabeordner generiert. Wenn das Tool die Assembly nicht generiert hat, werden Warnungen in der Buildausgabe angezeigt.

  7. Starten Sie den WCF-Dienst, indem Sie http://localhost:2561/Service1.svc zum Beispiel im Browser ausführen. Starten Sie dann die Clientanwendung, und sie wird automatisch geladen und verwendet die vorgenerierten Serialisierer zur Laufzeit.