Procedimiento para mejorar el tiempo de inicio de las aplicaciones cliente WCF mediante XmlSerializer
Los servicios y las aplicaciones cliente que usan tipos de datos que son serializables mediante XmlSerializer generan y compilan el código de serialización de los tipos de datos en tiempo de ejecución, lo que se puede traducir en un rendimiento de inicio lento.
Nota
El código de serialización generado previamente solo puede usarse en aplicaciones cliente y no en servicios.
La Herramienta de utilidad de metadatos de ServiceModel (Svcutil.exe) puede mejorar el rendimiento de inicio de estas aplicaciones mediante la generación de código de serialización necesario a partir de los ensamblados compilados para la aplicación. Svcutil.exe genera el código de serialización para todos los tipos de datos utilizados en contratos de servicios en el ensamblado de aplicación de compilación que se puede serializar utilizando XmlSerializer. Los contratos de operación y servicio que utiliza el XmlSerializer se marcan con XmlSerializerFormatAttribute.
Para generar el código de serialización de XmlSerializer
Compile su servicio o código de cliente en uno o más ensamblados.
Abra un símbolo del sistema de SDK.
En el símbolo del sistema, inicie la herramienta Svcutil.exe mediante el formato siguiente.
svcutil.exe /t:xmlSerializer <assemblyPath>*
El argumento
assemblyPath
especifica la ruta de acceso a un ensamblado que contiene tipos de contrato de servicio. Svcutil.exe genera el código de serialización para todos los tipos de datos utilizados en contratos de servicios en el ensamblado de aplicación de compilación que se puede serializar utilizando XmlSerializer.Svcutil.exe solo puede generar código de serialización de C#. Un archivo de código fuente se genera para cada ensamblado de entrada. No puede utilizar el conmutador /language para cambiar el lenguaje del código generado.
Para especificar la ruta de acceso a ensamblados dependientes, utilice la opción /reference.
Haga que el código de serialización generado esté disponible para su aplicación utilizando una de las opciones siguientes:
Compile el código de la serialización generado en un ensamblado independiente con el nombre [original assembly] .XmlSerializers.dll (por ejemplo, MyApp.XmlSerializers.dll). Su aplicación debe poder cargar el ensamblado, que se debe firmar con la misma clave como el ensamblado original. Si vuelve a compilar el ensamblado original, debe volver a generar el ensamblado de serialización.
Compile el código de serialización generado en un ensamblado independiente y utilice XmlSerializerAssemblyAttribute en el contrato de servicios que utiliza XmlSerializerFormatAttribute. Establezca las propiedades AssemblyName o CodeBase para señalar al ensamblado de serialización compilado.
Compile el código de serialización generado en su ensamblado de aplicación y agregue el XmlSerializerAssemblyAttribute al contrato de servicios que utiliza el XmlSerializerFormatAttribute. No establezca las propiedades AssemblyName ni CodeBase. Se supone que el ensamblado de serialización predeterminado es el ensamblado actual.
Para generar el código de serialización de XmlSerializer en Visual Studio
Cree los proyectos de servicio y cliente WCF en Visual Studio. A continuación, agregue al proyecto de cliente una referencia de servicio.
Agregue un valor XmlSerializerFormatAttribute al contrato de servicio en el archivo reference.cs del proyecto de aplicación cliente en serviceReference ->reference.svcmap. Tenga en cuenta que debe mostrar todos los archivos en el Explorador de soluciones para ver estos archivos.
Genere la aplicación cliente.
Use la Herramienta de utilidad de metadatos de ServiceModel (Svcutil.exe) para crear un archivo .cs de serializador previamente generado mediante el comando:
svcutil.exe /t:xmlSerializer <assemblyPath>*
El argumento assemblyPath especifica la ruta de acceso al ensamblado de cliente WCF.
Como:
svcutil.exe /t:xmlSerializer wcfclient.exe
Se generará el archivo WCFClient.XmlSerializers.dll.cs.
Compile el ensamblado de serialización previamente generado.
Según el ejemplo del paso anterior, el comando de compilación sería el siguiente:
csc /r:wcfclient.exe /out:WCFClient.XmlSerializers.dll /t:library WCFClient.XmlSerializers.dll.cs
Asegúrese de que el archivo WCFClient.XmlSerializers.dll generado se encuentra en el mismo directorio que la aplicación cliente, que es WCFClient.exe en este caso.
Ejecute la aplicación cliente como de costumbre. Se usará el ensamblado de serialización previamente generado.
Ejemplo
El siguiente comando genera los tipos de serialización para los tipos de XmlSerializer
utilizados por cualquier contrato de servicios en el ensamblado.
svcutil /t:xmlserializer myContractLibrary.exe