Макс. Исходящих соединений

У меня есть приложение, написанное на C# на.NET 4.0, которое должно сделать несколько запросов веб-службы. Запросы веб-службы различаются по своей природе, но в основном запрашивают информацию.

Вовлеченные типы являются производными от System.ServiceModel.ClientBase

Соединение настроено в коде и использует такие типы, как BasicHttpBinding, EndpointAddress, а также CustomBinding назвать несколько.

Как я могу определить максимальное количество одновременных запросов, которые могут быть сделаны на производной от ClientBase?

Мне не удалось найти какое-либо свойство, относящееся к MaxConnections, но я сталкиваюсь с такими вещами, как NetTcpBinding.MaxConnections и ConnectionManagementElement.MaxConnection, но ни одно из них не кажется совместимым с моими расширенными API. Либо мне не хватает их использования, этого нет, или я не знаю, где искать.

2 ответа

Решение

WCF - это абстракция основных сетевых концепций. Для HTTP-привязок он подпадает под конфигурацию ServicePoint, которая определяет такие вещи, как ограничения одновременных соединений HTTP.

Ты хочешь ServicePointManager.DefaultConnectionLimit для HTTP:

http://msdn.microsoft.com/en-us/library/system.net.servicepointmanager.defaultconnectionlimit.aspx

Вы также можете сделать это через ваш конфигурационный файл:

http://msdn.microsoft.com/en-us/library/fb6y0fyc.aspx

Это будет в разделе конфигурации привязки файла.config узла службы. В зависимости от используемой привязки вы можете установить такие вещи, как maxConcurrentCalls и maxConcurrentSessions, обычно для них существуют ограничения по умолчанию, налагаемые WCF.

Пример из реальной жизни:

<system.serviceModel>
        <behaviors>
            <serviceBehaviors>
                <behavior name="ServiceBehaviorBasicHttp">
          <serviceThrottling maxConcurrentCalls="1000" maxConcurrentSessions="1000" maxConcurrentInstances="1000"/>
                    <serviceMetadata />
                </behavior>
</system.serviceModel>

Или в коде, что-то вроде этого:

ServiceHost host = new ServiceHost(typeof(MyService));
ServiceThrottlingBehavior throttleBehavior = new ServiceThrottlingBehavior
{
    MaxConcurrentCalls = 40,
    MaxConcurrentInstances = 20,
    MaxConcurrentSessions = 20,
};
host.Description.Behaviors.Add(throttleBehavior);
host.Open();

Взято отсюда: WCF: Как добавить ServiceThrottlingBehavior к службе WCF?

Другие вопросы по тегам