WCF Proxy Pool / Менеджер - PullRequest
       15

WCF Proxy Pool / Менеджер

0 голосов
/ 31 августа 2011

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

public static class ClientManager
{
    private static readonly Service1Client _service1Client = new Service1Client();
    private static readonly Service2Client _service2Client = new Service2Client();
    ...

    public static Service1Client Service1DefaultClient { get { return _service1Client; } }
    public static Service2Client Service2DefaultClient { get { return _service2Client; } }
}

Тогда из оставшегося кода мне нужно будет только выполнить

ClientManager.Service1DefaultClient.SomeMethod();
ClientManager.Service2DefaultClient.SomeMethod();
...

Идея состоит в том, чтобы создать центральное место для лучшего управления клиентами WCF.Тем не менее, я действительно не знаю, является ли этот дизайн наиболее подходящим для службы, которая будет выдавать несколько запросов одновременно на Service1DefaultClient и Service2DefaultClient.Что ты предлагаешь?Создание более сложного клиентского пула с несколькими прокси из каждого сервиса на выбор?

1 Ответ

3 голосов
/ 31 августа 2011

Наличие статических клиентских прокси-серверов для меня не очень хорошая идея.

  • Если экземпляр ClientBase переходит в состояние Failed, он становится непригодным для использования, и вам придется его заново создавать.
  • Если у вас есть служба с сохранением состояния, время жизни сеанса будет таким же, как и время жизни прокси-объекта клиента, которое в вашем случае очень велико.
  • В зависимости от настроек привязки, ClientBase может сериализовать одновременные вызовы , сделанные на одном и том же экземпляре прокси.В вашем случае это может сильно повлиять на производительность.
  • Я просто не вижу, какую проблему это решает.

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

...