Использование dotnet-svcutil.xmlserializer в .NET Core

Пакет dotnet-svcutil.xmlserializer NuGet может предварительно создать сборку сериализации для проектов .NET Core. Он предварительно создает код сериализации C# для типов в клиентском приложении, которые используются контрактом службы WCF и могут быть сериализованы XmlSerializer. Это повышает производительность запуска сериализации XML при сериализации или десериализации объектов этих типов.

Предпосылки

С помощью команды dotnet --info можно проверить, какие версии пакета SDK для .NET и среды выполнения уже установлены.

Начало работы

Чтобы использовать dotnet-svcutil.xmlserializer в консольном приложении .NET Core, выполните следующее:

  1. Создайте службу WCF с именем MyWCFService с помощью шаблона по умолчанию "Приложение службы WCF" в .NET Framework. Добавьте [XmlSerializerFormat] атрибут в метод службы, как показано ниже:

     [ServiceContract]
     public interface IService1
     {
         [XmlSerializerFormat]
         [OperationContract(Action = "http://tempuri.org/IService1/GetData", ReplyAction = "http://tempuri.org/IService1/GetDataResponse")]
         string GetData(int value);
     }
    
  2. Создайте консольное приложение .NET Core в качестве клиентского приложения WCF, предназначенного для .NET Core 2.1 или более поздних версий. Например, создайте приложение с именем MyWCFClient с помощью следующей команды:

    dotnet new console --name MyWCFClient
    

    Чтобы убедиться, что проект предназначен для .NET Core 2.1 или более поздней версии, проверьте TargetFramework XML-элемент в файле проекта:

    <TargetFramework>netcoreapp2.1</TargetFramework>
    
  3. Добавьте ссылку на System.ServiceModel.Http пакет, выполнив следующую команду:

    dotnet add package System.ServiceModel.Http
    
  4. Добавьте код клиента 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);
    }
    
  5. Добавьте ссылку на dotnet-svcutil.xmlserializer пакет, выполнив следующую команду:

    dotnet add package dotnet-svcutil.xmlserializer
    

    Выполнение команды должно добавить запись в файл проекта следующим образом:

    <ItemGroup>
      <DotNetCliToolReference Include="dotnet-svcutil.xmlserializer" Version="1.0.0" />
    </ItemGroup>
    
  6. Постройте приложение, запустив dotnet build. Если все успешно, сборка с именем MyWCFClient.XmlSerializers.dll создается в выходной папке. Если средство не удалось создать сборку, вы увидите предупреждения в выходных данных сборки.

  7. Запустите службу WCF, например, выполнив http://localhost:2561/Service1.svc в браузере. Затем запустите клиентское приложение, и он автоматически загружает и использует предварительно созданные сериализаторы во время выполнения.