Практическое руководство. Сокращение времени запуска клиентских приложений WCF с использованием XmlSerializer

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

Примечание.

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

Средство служебной программы метаданных ServiceModel (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 в Visual Studio

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

  2. XmlSerializerFormatAttribute Добавьте контракт службы в файл reference.cs в проекте клиентского приложения в разделе serviceReference ->reference.svcmap. Обратите внимание, что для просмотра этих файлов необходимо отобразить все файлы в Обозреватель решений.

  3. Создайте клиентское приложение.

  4. Используйте служебную программу метаданных ServiceModel (Svcutil.exe), чтобы создать предварительно созданный файл сериализатора .cs с помощью команды:

    svcutil.exe /t:xmlSerializer  <assemblyPath>*  
    

    Аргумент assemblyPath указывает путь к клиентской сборке WCF.

    Такие как:

    svcutil.exe /t:xmlSerializer wcfclient.exe  
    

    Будет создан файл WCFClient.XmlSerializers.dll.cs .

  5. Скомпилируйте предварительно созданную сборку сериализации.

    На основе примера на предыдущем шаге команда компиляции будет следующей:

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

    Убедитесь, что созданный WCFClient.XmlSerializers.dll находится в том же каталоге, что и клиентское приложение, WCFClient.exe в данном случае.

  6. Запустите клиентское приложение как обычно. Будет использоваться предварительно созданная сборка сериализации.

Пример

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

svcutil /t:xmlserializer myContractLibrary.exe  

См. также