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


Клиентские приложения среднего уровня

В данном разделе описываются различные вопросы, связанные с клиентскими приложениями среднего уровня, использующими Windows Communication Foundation (WCF).

Увеличение производительности клиента среднего уровня

По сравнению с предыдущими технологиями связи, такими как веб-службы, использующие ASP.NET, создание экземпляра клиента WCF может быть более сложной задачей из-за богатого набора функций WCF. Например, при открытии объекта ChannelFactory он может установить безопасный сеанс со службой, что увеличит время запуска экземпляра клиента. Обычно такие дополнительные функциональные возможности сильно не влияют на клиентские приложения, поскольку клиент WCF выполняет несколько вызовов, а затем закрывается.

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

  • Кэширование объекта клиента WCF и его повторное использование для последующих вызовов там, где это возможно.

  • Создание объекта ChannelFactory и его использование для создания новых объектов клиентских каналов WCF для каждого вызова.

При использовании этих подходов следует рассмотреть следующие вопросы.

  • Если служба сохраняет характерное для клиента состояние, используя сеанс, невозможно повторно использовать клиент WCF среднего уровня с запросами уровня нескольких клиентов, поскольку состояние службы связано с состоянием клиента среднего уровня.

  • Если служба должна выполнить проверку подлинности на основе отдельных клиентов, следует создать новый клиент для каждого входящего запроса на среднем уровне вместо повторного использования клиента WCF среднего уровня (или объекта клиентского канала WCF), поскольку учетные данные клиента среднего уровня невозможно изменить после создания клиента WCF (или ChannelFactory).

  • Поскольку каналы и клиенты, созданные этими каналами, потокобезопасны, они могут не поддерживать запись нескольких сообщений по сети одновременно. При отправке больших сообщений, в частности, при потоковой передаче, операция отправки может заблокироваться, ожидая завершения еще одной отправки. Это может стать причиной возникновения двух проблем: отсутствия параллелизма и возможности взаимоблокировки, если поток команд управления возвращается в службу, повторно используя канал (т. е. общий клиент вызывает службу, путь кода которой приводит к обратному вызову общего клиента). Это верно независимо от типа клиента WCF, используемого повторно.

  • Каналы со сбоем необходимо обрабатывать независимо от того, используется ли канал совместно. Однако, если каналы используются повторно, канал со сбоем может привести к отмене нескольких ожидающих запросов или отправок.

Пример с рекомендациями по повторному использованию клиента для нескольких запросов см. в разделе Привязка данных в клиенте ASP.NET.

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

См. также

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

Обращение к службам с использованием клиента