Инкапсуляция прокси WCF в статических классах - PullRequest
2 голосов
/ 24 июня 2011

Я разрабатываю веб-сервис, который будет вызывать различные внешние веб-сервисы в соответствии со свойствами данного объекта (например, «запрос»).Ссылка на эти веб-службы добавляется через меню «Добавить веб-ссылку» в Visual Studio 2008, которая, как вы знаете, создает прокси-класс для каждой конечной точки, который наследуется от System.ServiceModel.ChannelBase<ISomeInterface> (где ISomeInterface - это конечная точка, определенная какWSDL конкретной службы).

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

Я думал о дизайне ServiceManager как

public static class ServiceManager
{
    #region Properties

    public static Dictionary<string, TProxy> ServiceList { get; private set; }

    #endregion
}

, но я не знаю, что мне следует заменить TProxy натак что все различные прокси могут быть вызваны с помощью ServiceManager.ServiceList["ServiceName"].Может кто-нибудь помочь мне с этим?

Ответы [ 2 ]

3 голосов
/ 24 июня 2011

Поскольку каждый сервис реализует свой интерфейс, он должен быть объектом ... Если вы не можете создать общий базовый интерфейс, заставить прокси наследовать от этого интерфейса, а затем создать список .

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

2 голосов
/ 24 июня 2011

Не используйте прокси повторно.Восстановить их.Магические строки для разграничения прокси одинаково плохи.

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

Примерно так:

public static class ServiceFactory
{
    public static Proxy CreateProxy();
    public static Proxy2 CreateProxy2();
    // etc.
}
...