Поделиться через


Как сократить время запуска клиентских приложений WCF с использованием XmlSerializer

Службы и клиентские приложения, использующие типы данных, сериализуемые с помощью сериализатора XmlSerializer, создают и компилируют код сериализации для этих типов данных во время выполнения, что может привести к снижению производительности при запуске.

Aa751883.note(ru-ru,VS.100).gifПримечание
Предварительно созданный код сериализации может использоваться только в клиентских приложениях, но не в службах.

Служебное средство ServiceModel Metadata Utility Tool (Svcutil.exe) может улучшить производительность при запуске этих приложений путем создания необходимого кода сериализации из скомпилированных сборок для приложения. Svcutil.exe создает код сериализации для всех типов данных, используемых в контрактах служб в скомпилированной сборке приложения, которые могут быть сериализованы с помощью XmlSerializer. Контракты служб и операций, предусматривающие использование XmlSerializer, отмечены атрибутом XmlSerializerFormatAttribute.

Создание кода сериализации XmlSerializer

  1. Скомпилируйте код службы или клиента в одну или несколько сборок.

  2. Откройте окно командной строки SDK.

  3. Из командной строки запустите средство Svcutil.exe, используя следующий формат.

    svcutil.exe /t:xmlSerializer  <assemblyPath>*
    

    Аргумент assemblyPath задает путь к сборке, содержащей типы из контракта службы. Svcutil.exe создает код сериализации для всех типов данных, используемых в контрактах служб в скомпилированной сборке приложения, которые могут быть сериализованы с помощью XmlSerializer.

    Svcutil.exe может формировать только код сериализации на C#. Для каждой входной сборки создается один файл исходного кода. Изменить язык создаваемого кода с помощью ключа /language нельзя.

    Чтобы задать путь к зависимым сборкам, используйте параметр /reference.

  4. Предоставьте приложению доступ к созданному коду сериализации одним из следующих способов.

    1. Скомпилируйте созданный код сериализации в отдельную сборку с именем [исходная сборка].XmlSerializers.dll (например, MyApp.XmlSerializers.dll). Приложение должно иметь возможность загрузить эту сборку, которая должна быть подписана с помощью того же ключа, что и исходная сборка. В случае повторной компиляции исходной сборки необходимо заново создать сборку сериализации.

    2. Скомпилируйте созданный код сериализации в отдельную сборку и используйте атрибут XmlSerializerAssemblyAttribute в контракте службы, в котором используется атрибут XmlSerializerFormatAttribute. Задайте свойство AssemblyName или CodeBase так, чтобы оно указывало на скомпилированную сборку сериализации.

    3. Скомпилируйте созданный код сериализации в сборку приложения и добавьте атрибут XmlSerializerAssemblyAttribute в контракт службы, в котором используется атрибут XmlSerializerFormatAttribute. Не задавайте свойства AssemblyName или CodeBase. По умолчанию предполагается, что сборка сериализации по умолчанию является текущей сборкой.

Пример

Следующая команда создает типы сериализации для типов XmlSerializer, используемых любыми контрактами служб в сборке.

svcutil /t:xmlserializer myContractLibrary.exe

См. также

Основные понятия

Служебное средство ServiceModel Metadata Utility Tool (Svcutil.exe)