Compartilhar via


Como melhorar o tempo de inicialização de aplicativos cliente do WCF usando o XmlSerializer

Serviços e aplicativos cliente que utilizam tipos de dados serializáveis com o XmlSerializer geram e compilam o código de serialização para esses tipos de dados durante o tempo de execução, o que pode resultar em um desempenho lento de inicialização.

Observação

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

A Ferramenta de Utilitário de Metadados do ServiceModel (Svcutil.exe) pode melhorar o desempenho de inicialização desses aplicativos gerando o código de serialização necessário dos assemblies compilados para o aplicativo. Svcutil.exe gera código de serialização para todos os tipos de dados usados em contratos de serviço no assembly do aplicativo compilado que podem ser serializados usando o XmlSerializer. Os contratos de serviço e operação que usam o XmlSerializer são marcados com o XmlSerializerFormatAttribute.

Para gerar o código de serialização do XmlSerializer

  1. Compile seu serviço ou código do cliente em um ou mais assemblies.

  2. Abra um prompt de comando do SDK.

  3. No prompt de comando, inicie a ferramenta Svcutil.exe usando o formato a seguir.

    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 usados nos contratos de serviço no assembly do aplicativo compilado que podem ser serializados usando o XmlSerializer.

    Svcutil.exe só pode gerar código de serialização em C#. Um arquivo de código-fonte é gerado para cada assembly de entrada. Você não pode usar a opção /language para alterar o idioma do código gerado.

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

  4. Disponibilize o código de serialização gerado para seu aplicativo usando uma das seguintes opções:

    1. Compile o código de serialização gerado em um assembly separado com o nome [assembly original].XmlSerializers.dll (por exemplo, MyApp.XmlSerializers.dll). Seu aplicativo deve ser capaz de carregar o assembly, que deve ser assinado com a mesma chave que o assembly original. Se você recompilar o assembly original, deverá regenerar o assembly de serialização.

    2. Compile o código de serialização gerado em um assembly separado e utilize o XmlSerializerAssemblyAttribute no contrato de serviço que usa o XmlSerializerFormatAttribute. Defina a propriedade AssemblyName ou CodeBase para apontar para o assembly de serialização compilado.

    3. Compile o código de serialização gerado no assembly do seu aplicativo e adicione o XmlSerializerAssemblyAttribute ao contrato de serviço que usa o XmlSerializerFormatAttribute. Não defina as propriedades AssemblyName ou CodeBase. Supõe-se que o assembly de serialização padrão seja o assembly atual.

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

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

  2. Adicione um XmlSerializerFormatAttribute ao contrato de serviço no arquivo reference.cs no projeto do aplicativo cliente em serviceReference ->reference.svcmap. Observe que você precisa mostrar todos os arquivos no Gerenciador de Soluções para ver esses arquivos.

  3. Crie o aplicativo cliente.

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

    svcutil.exe /t:xmlSerializer  <assemblyPath>*
    

    O argumento assemblyPath especifica o caminho para o assembly do cliente WCF.

    Tal como:

    svcutil.exe /t:xmlSerializer wcfclient.exe
    

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

  5. Compile a assembléia de serialização pré-gerada.

    Com base no exemplo na etapa anterior, o comando de compilação seria o seguinte:

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

    Verifique se o WCFClient.XmlSerializers.dll gerado está no mesmo diretório que o aplicativo cliente, que é WCFClient.exe nesse caso.

  6. Execute o aplicativo cliente como de costume. A montagem de serialização pré-gerada será usada.

Example

O comando a seguir gera tipos de serialização para os tipos que os contratos de serviço no assembly utilizam.

svcutil /t:xmlserializer myContractLibrary.exe

Consulte também