Инициализация прокси-сервера клиента WCF

StackOverflow https://stackoverflow.com/questions/1681787

  •  16-09-2019
  •  | 
  •  

Вопрос

Я использую службу WCF и создал ее прокси, используя ссылку на службу VS 2008.

Я ищу наилучший шаблон для вызова сервисного метода WCF

  • Должен ли я создавать экземпляр прокси-сервера клиента каждый раз, когда я вызываю метод service, и закрывать клиент, как только я закончу с этим?Когда я профилировал свое клиентское приложение, я мог видеть, что получение канала при инициализации прокси-клиента занимает много времени
  • Должен ли я использовать одноэлементный шаблон для клиентского прокси-сервера, чтобы я мог использовать экземпляр only once и избавиться от накладных расходов на повторную инициализацию?Есть ли какая-то скрытая проблема с таким подходом?

Я использую .Net framework 3.5 SP1, привязка к basicHttp с небольшими настройками.

Это было полезно?

Решение

Это зависит ;-)

Если у вас есть последовательность в вашем приложении, которая требует нескольких вызовов друг за другом, вы могли бы подключиться к прокси-клиенту и продолжать использовать его для совершения дальнейших вызовов.Однако имейте в виду, что необходимо проверить состояние "сбой" - если на сервере произойдет ошибка, канал между клиентским прокси-сервером и сервером может "выйти из строя", и, таким образом, ваш клиентский прокси станет непригодным для использования.

Кроме того, дорогостоящей частью является создание ChannelFactory<T> - вы могли бы попробовать разделить эти два шага при создании вашего клиентского проекта в коде:

ChannelFactory<IYourService> factory = new ChannelFactory<IYourService>();

Держитесь за эту фабрику каналов, напримерспрячь его где - нибудь

Второй этап должен быть гораздо менее интенсивным с точки зрения времени и лошадиных сил:

IYourService client = factory.CreateChannel();

Вы могли бы выполнять этот шаг перед каждым вызовом (или последовательностью вызовов) и, на самом деле, не должны получать от этого плохой производительности.

Я бы настоятельно рекомендовал избегать одиночных игр, когда это возможно - это все равно что открывать банку с червями, не делайте этого, если вам абсолютно не нужно (напримердля управления доступом к одному ресурсу, который одновременно доступен только для одного вызывающего абонента).

Марк

Другие советы

Извините, что поднял старый вопрос, но я хотел добавить это для удобства использования.

Я полностью согласен с marc_s и rally25rs.Так что начните с этого, но также рассмотрите возможность использования прокси-сервера или оболочки, которая обрабатывает сбойные состояния. Вот такой вопрос на SO, в котором обсуждаются некоторые решения, и вот еще один хорошее решение, на которое я наткнулся в Интернете от Корнелиу, "Создание повторно используемого прокси-сервера клиентской базы".Его решение генерирует оболочки, которые предоставляют ваши методы обслуживания для максимального удобства и производительности.Хотя мне все еще нужно проверить, работает ли это :).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top