Compartilhar via


Usar o dotnet-svcutil.xmlserializer no .NET Core

O pacote NuGet dotnet-svcutil.xmlserializer pode pré-gerar um assembly de serialização para projetos .NET Core. Ele pré-gera o código de serialização C# para os tipos no aplicativo cliente que são usados pelo Contrato de Serviço do WCF e que podem ser serializados pelo XmlSerializer. Isso melhora o desempenho de inicialização da serialização de XML ao serializar ou desserializar objetos desses tipos.

Pré-requisitos

Você pode usar o comando dotnet --info para verificar quais versões do SDK do .NET e do runtime estão instaladas.

Introdução

Para usar dotnet-svcutil.xmlserializer em um aplicativo de console do .NET Core:

  1. Crie um serviço do WCF chamado “MeuServiçoWCF” usando o modelo padrão “Aplicativo de serviço WCF” no .NET Framework. Adicione o atributo [XmlSerializerFormat] ao método de serviço desta forma:

     [ServiceContract]
     public interface IService1
     {
         [XmlSerializerFormat]
         [OperationContract(Action = "http://tempuri.org/IService1/GetData", ReplyAction = "http://tempuri.org/IService1/GetDataResponse")]
         string GetData(int value);
     }
    
  2. Crie um aplicativo de console do .NET Core como um aplicativo cliente do WCF direcionado ao .NET Core 2.1 ou versões posteriores. Por exemplo, crie um aplicativo chamado 'MyWCFClient' com o seguinte comando:

    dotnet new console --name MyWCFClient
    

    Para garantir que o projeto seja direcionado ao .NET Core 2.1 ou posterior, inspecione o elemento XML TargetFramework no arquivo de projeto:

    <TargetFramework>netcoreapp2.1</TargetFramework>
    
  3. Adicione uma referência de pacote a System.ServiceModel.Http executando o seguinte comando:

    dotnet add package System.ServiceModel.Http
    
  4. Adicione o código de cliente do 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. Adicione uma referência ao pacote dotnet-svcutil.xmlserializer executando o seguinte comando:

    dotnet add package dotnet-svcutil.xmlserializer
    

    A execução do comando deverá adicionar uma entrada ao arquivo de projeto semelhante a esta:

    <ItemGroup>
      <DotNetCliToolReference Include="dotnet-svcutil.xmlserializer" Version="1.0.0" />
    </ItemGroup>
    
  6. Compile o aplicativo executando dotnet build. Se tudo for bem-sucedido, um assembly chamado MyWCFClient.XmlSerializers.dll será gerado na pasta de saída. Se a ferramenta não puder gerar o assembly, você verá avisos na saída do build.

  7. Inicie o serviço WCF, por exemplo, executando http://localhost:2561/Service1.svc no navegador. Depois, inicie o aplicativo cliente, e ele será carregado automaticamente e usará os serializadores pré-gerados no tempo de execução.