Partilhar via


Como: Melhorar o tempo de arranque das aplicações cliente WCF usando o XmlSerializer

Serviços e aplicações clientes que utilizam tipos de dados serializáveis geram e compilam o código de serialização para esses tipos de dados em tempo de execução usando o XmlSerializer, o que pode resultar num desempenho lento durante o arranque.

Observação

O código de serialização pré-gerado só pode ser usado em aplicações cliente e não em serviços.

A ServiceModel Metadata Utility Tool (Svcutil.exe) pode melhorar o desempenho de arranque destas aplicações ao gerar o código de serialização necessário a partir dos assemblies compilados para a aplicação. Svcutil.exe gera código de serialização para todos os tipos de dados usados em contratos de serviço na aplicação compilada, permitindo que esses tipos sejam serializados usando o XmlSerializer. Os contratos de serviço e operação que utilizam o XmlSerializer estão marcados com o XmlSerializerFormatAttribute.

Para gerar código de serialização XmlSerializer

  1. Compile o seu código de serviço ou cliente em uma ou mais assemblies.

  2. Abra um prompt de comandos SDK.

  3. No prompt de comandos, inicie a ferramenta Svcutil.exe usando o seguinte formato.

    svcutil.exe /t:xmlSerializer  <assemblyPath>*
    

    O assemblyPath argumento especifica o caminho para um assembly que contém tipos de contrato de serviço. Svcutil.exe gera código de serialização para todos os tipos de dados utilizados nos contratos de serviço dentro do assembly compilado da aplicação, que pode ser serializado utilizando o XmlSerializer.

    Svcutil.exe só pode gerar código de serialização em C#. É gerado um ficheiro de código-fonte para cada assembly de entrada. Não podes usar o interruptor /language para alterar a linguagem do código gerado.

    Para especificar o caminho para assemblies dependentes, use a opção /reference .

  4. Torne o código de serialização gerado disponível para a sua aplicação utilizando uma das seguintes opções:

    1. Compilar o código de serialização gerado numa assembly separada com o nome [assembly original].XmlSerializers.dll (por exemplo, MyApp.XmlSerializers.dll). A sua aplicação deve conseguir carregar o assembly, que precisa estar assinado com a mesma chave que o assembly original. Se recompilar a assemblagem original, deve regenerar a assemblagem de serialização.

    2. Compilar o código de serialização gerado para um assembly separado e usar o XmlSerializerAssemblyAttribute no contrato de serviço que utiliza o XmlSerializerFormatAttribute. Defina as propriedades AssemblyName ou CodeBase para apontar para o assembly de serialização compilado.

    3. Compile o código de serialização gerado no assembly da sua aplicação e adicione o XmlSerializerAssemblyAttribute ao contrato de serviço que utiliza o XmlSerializerFormatAttribute. Não defina as propriedades AssemblyName ou CodeBase. Assume-se que o conjunto de serialização por defeito é o conjunto atual.

Para gerar código de serialização XmlSerializer no Visual Studio

  1. Crie o serviço WCF e os projetos do cliente no Visual Studio. Depois, adicione uma referência de serviço ao projeto cliente.

  2. Adicione um XmlSerializerFormatAttribute ao contrato de serviço no ficheiro reference.cs no projeto da aplicação cliente em serviceReference - >reference.svcmap. Note que precisa de mostrar todos os ficheiros no Explorador de Soluções para ver esses ficheiros.

  3. Constrói a aplicação do cliente.

  4. Use a Ferramenta Utilitária de Metadados do ServiceModel (Svcutil.exe) para criar um ficheiro de serializador .cs pré-gerado usando o comando:

    svcutil.exe /t:xmlSerializer  <assemblyPath>*
    

    O argumento assemblyPath especifica o caminho para a biblioteca cliente WCF.

    Tais como:

    svcutil.exe /t:xmlSerializer wcfclient.exe
    

    O ficheiro WCFClient.XmlSerializers.dll.cs será gerado.

  5. Compilar o conjunto de serialização pré-gerado.

    Com base no exemplo do passo anterior, o comando de compilação seria o seguinte:

    csc /r:wcfclient.exe /out:WCFClient.XmlSerializers.dll /t:library WCFClient.XmlSerializers.dll.cs
    

    Certifique-se de que o WCFClient.XmlSerializers.dll gerado está no mesmo diretório da aplicação cliente, que é WCFClient.exe neste caso.

  6. Executa a aplicação cliente como de costume. Será utilizado o conjunto de serialização pré-gerado.

Example

O comando seguinte gera tipos de serialização para tipos que qualquer contrato de serviço na montagem utiliza.

svcutil /t:xmlserializer myContractLibrary.exe

Consulte também