Производительность ChannelFactory <T>по сравнению с предварительно сгенерированным прокси с использованием Svcutil - PullRequest
4 голосов
/ 02 марта 2012

Дают ли сгенерированные Svcutil прокси лучшую производительность по сравнению с ChannelFactory, используемой во время выполнения?Кэширует ли прокси-сервер ChannelFactory по умолчанию?

Я использую .NET 4 со службой, в которой более 100 операций и более 500 контрактов на данные, участвующих в ней.

Когда я использую ChannelFactory<T>, мне нужно очень много времени, чтобы вернуть мне прокси.Можно ли предложить, какой способ создания прокси является лучшим?

Мой код выглядит следующим образом:

EndpointAddress endPoint = new EndpointAddress(url);
// My own API which gives the custom binding I create programatically
CustomBinding binding = BindingFactory.GetCustomBinding("WSECustomBinding");
ChannelFactory<T> factory = new ChannelFactory<T>(binding, endPoint);

1 Ответ

2 голосов
/ 03 марта 2012

Когда вы генерируете код с помощью Svcutil, вы получаете класс, расширяющий ClientBase, который является оболочкой для ChannelFactory.

Прокси-серверы Svcutil позволяют вам вызывать сервис как методы для объектов, вместо непосредственного взаимодействия с ChannelFactories / Channels и, кроме того, предлагают некоторые дополнительные функции, такие как фабрики кеширования каналов, но под капотом это тот же движок .

Из вашего кода не ясно, что вы делаете, но вы создаете ChannelFactory при каждом вызове операции? Создание ChannelFactory стоит дорого, и вы обычно кэшируете этот экземпляр, чтобы затем использовать его для открытия, использования, а затем закрытия каналов для вызовов операций.

Более подробные объяснения см. На следующих страницах:

...