Клиентские приложения среднего уровняMiddle-Tier Client Applications

В этом разделе описываются различные вопросы, относящиеся к среднего уровня клиентские приложения, использующие Windows Communication Foundation (WCF).This topic discusses various issues specific to middle-tier client applications that use Windows Communication Foundation (WCF).

Увеличение производительности клиента среднего уровняIncreasing Middle-Tier Client Performance

По сравнению с предыдущими технологиями связи, таких как веб-служб с помощью ASP.NET, создания экземпляра клиента WCF может быть более сложным из-за богатого набора возможностей WCF.Compared to previous communications technologies, such as Web services using ASP.NET, the creation of a WCF client instance can be more complex due to the rich feature set of WCF. Например, при открытии объекта ChannelFactory<TChannel> он может установить безопасный сеанс со службой, что увеличит время запуска экземпляра клиента.For example, when a ChannelFactory<TChannel> object is opened it can establish a secure session with the service, a procedure that increases the startup time for the client instance. Как правило эти дополнительные функциональные возможности сильно влияет на клиентские приложения, так как клиент WCF выполняет несколько вызовов, а затем закрывает.Typically, these additional feature capabilities do not affect client applications greatly since the WCF client makes several calls, and then closes.

Средний уровень клиентские приложения, тем не менее, можно быстро создавать множество объектов клиента WCF и, таким образом, возникнуть более высокие требования инициализации.Middle-tier client applications, however, can create many WCF client objects quickly and, as a result, experience increased initialization requirements. Существует два основных подхода к увеличению производительности приложений среднего уровня при вызове служб.There are two main approaches to increasing the performance of middle-tier applications when calling services:

  • Кэширование объекта клиента WCF и повторно использовать ее для последующих вызовов, где это возможно.Cache the WCF client object and reuse it for subsequent calls where possible.

  • Создание ChannelFactory<TChannel> объекта и его использование для создания нового клиента WCF объекты каналов для каждого вызова.Create a ChannelFactory<TChannel> object and then use that object to create new WCF client channel objects for each call.

При использовании этих подходов следует рассмотреть следующие вопросы.Issues to consider when using these approaches include:

  • Если служба сохраняет характерное клиента состояние с помощью сеанса, не может использовать клиент WCF среднего уровня с запросами уровня нескольких клиентов, так как состояние службы связано с клиента среднего уровня.If the service is maintaining a client-specific state by using a session, then you cannot reuse the middle-tier WCF client with multiple-client tier requests because the service's state is tied to that of the middle-tier client.

  • Если служба должна выполнить проверку подлинности на основе на одного клиента, необходимо создать новый клиент для каждого входящего запроса на среднем уровне вместо повторного использования клиента среднего уровня WCF (или в объекте канала клиента WCF), так как учетные данные клиента среднего уровня Невозможно изменить после клиент WCF (или ChannelFactory<TChannel>) будет создана.If the service must perform authentication on a per-client basis, you must create a new client for each incoming request on the middle tier instead of reusing the middle-tier WCF client (or WCF client channel object) because the client credentials of the middle tier cannot be modified after the WCF client (or ChannelFactory<TChannel>) has been created.

  • Поскольку каналы и клиенты, созданные этими каналами, потокобезопасны, они могут не поддерживать запись нескольких сообщений по сети одновременно.While channels and clients created by the channels are thread-safe, they might not support writing more than one message to the wire concurrently. При отправке больших сообщений, в частности, при потоковой передаче, операция отправки может заблокироваться, ожидая завершения еще одной отправки.If you are sending large messages, particularly if streaming, the send operation might block waiting for another send to complete. Это может стать причиной возникновения двух проблем: отсутствия параллелизма и возможности взаимоблокировки, если поток команд управления возвращается в службу, повторно используя канал (т. е. общий клиент вызывает службу, путь кода которой приводит к обратному вызову общего клиента).This causes two sorts of problems: a lack of concurrency and the possibility of deadlock if the flow of control returns to the service reusing the channel (that is, the shared client calls a service whose code path results in a callback to the shared client). Это верно независимо от типа клиента WCF, которые можно повторно использовать.This is true regardless of the type of WCF client you reuse.

  • Каналы со сбоем необходимо обрабатывать независимо от того, используется ли канал совместно.You must handle faulted channels regardless of whether you share the channel. Однако, если каналы используются повторно, канал со сбоем может привести к отмене нескольких ожидающих запросов или отправок.When channels are reused, however, a faulting channel can take down more than one pending request or send.

Пример, демонстрирующий рекомендациями по повторному использованию клиента для нескольких запросов, см. в разделе привязки данных в клиенте ASP.NET.For an example that demonstrates best practices for reusing a client for multiple requests, see Data Binding in an ASP.NET Client.

Кроме того, можно повысить производительность при запуске для клиентов, которые используют типы данных, сериализуемые при помощи сериализатора XmlSerializer, создают и компилируют код сериализации для этих типов данных в среде выполнения, что может привести к снижению производительности при запуске.In addition, you can increase the startup performance for those clients that use data types that are serializable using the XmlSerializer generate and compile serialization code for those data types at runtime, which can result in slow start-up performance. ServiceModel Metadata Utility Tool (Svcutil.exe) может повысить производительность при запуске этих приложений путем создания необходимого кода сериализации из компилированных сборок для приложения.The ServiceModel Metadata Utility Tool (Svcutil.exe) can improve start-up performance for these applications by generating the necessary serialization code from the compiled assemblies for the application. Дополнительные сведения см. в разделе Практическое руководство. Улучшения запуска время клиентских приложений WCF с использованием XmlSerializer.For more information, see How to: Improve the Startup Time of WCF Client Applications using the XmlSerializer.

См. такжеSee also