Partilhar via


Como: Melhorar o tempo de inicialização de aplicativos cliente WCF usando o XmlSerializer

Serviços e aplicativos cliente que usam tipos de dados que são serializáveis usando o código de serialização gerar e compilar para esses tipos de dados em tempo de execução, o XmlSerializer que pode resultar em desempenho de inicialização lento.

Nota

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

A ServiceModel Metadata Utility Tool (Svcutil.exe) pode melhorar o desempenho de inicialização para esses 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 de aplicativo compilado que pode ser serializado 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 código de serviço ou 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 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 usados em contratos de serviço no assembly de aplicativo compilado que pode ser serializado 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. Não é possível 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 use o XmlSerializerAssemblyAttribute no contrato de serviço que usa o XmlSerializerFormatAttribute. Defina as AssemblyName propriedades ou CodeBase para apontar para o assembly de serialização compilado.

    3. Compile o código de serialização gerado em seu assembly de aplicativo e adicione o XmlSerializerAssemblyAttribute ao contrato de serviço que usa o XmlSerializerFormatAttribute. Não defina as AssemblyName propriedades ou CodeBase . O assembly de serialização padrão é assumido como o assembly atual.

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

  1. Crie o serviço WCF e projetos de 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 de 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 ServiceModel Metadata Utility Tool (Svcutil.exe) para criar um arquivo de .cs serializador pré-gerado usando o comando:

    svcutil.exe /t:xmlSerializer  <assemblyPath>*  
    

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

    Tais como:

    svcutil.exe /t:xmlSerializer wcfclient.exe  
    

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

  5. Compile o assembly de serialização pré-gerado.

    Com base no exemplo da etapa anterior, o comando compile 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 do aplicativo cliente, o que é WCFClient.exe neste caso.

  6. Execute o aplicativo cliente como de costume. O assembly de serialização pré-gerado será usado.

Exemplo

O comando a seguir gera tipos de serialização para XmlSerializer tipos que qualquer contrato de serviço no assembly usa.

svcutil /t:xmlserializer myContractLibrary.exe  

Consulte também