Макс. Исходящих соединений
У меня есть приложение, написанное на 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
Вы также можете сделать это через ваш конфигурационный файл:
Это будет в разделе конфигурации привязки файла.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?