WCF: Как добавить ServiceThrottlingBehavior к службе WCF?
У меня есть код ниже для возврата экземпляра моей службы WCF ServiceClient
:
var readerQuotas = new XmlDictionaryReaderQuotas()
{
MaxDepth = 6000000,
MaxStringContentLength = 6000000,
MaxArrayLength = 6000000,
MaxBytesPerRead = 6000000,
MaxNameTableCharCount = 6000000
};
var throttlingBehaviour = new ServiceThrottlingBehavior(){MaxConcurrentCalls=500,MaxConcurrentInstances=500,MaxConcurrentSessions = 500};
binding = new WSHttpBinding(SecurityMode.None) {MaxReceivedMessageSize = 6000000, ReaderQuotas = readerQuotas};
dualBinding = new WSDualHttpBinding(WSDualHttpSecurityMode.None)
{MaxReceivedMessageSize = 6000000, ReaderQuotas = readerQuotas};
endpointAddress = new EndpointAddress("http://localhost:28666/DBInteractionGateway.svc");
return new MusicRepo_DBAccess_ServiceClient(new InstanceContext(instanceContext), dualBinding, endpointAddress);
В последнее время у меня были некоторые проблемы с тайм-аутами, и поэтому я решил добавить поведение регулирования, например:
var throttlingBehaviour = new ServiceThrottlingBehavior () {
MaxConcurrentCalls=500,
MaxConcurrentInstances=500,
MaxConcurrentSessions = 500
};
Мой вопрос, где в приведенном выше коде я должен добавить это throttlingBehaviour
к моему MusicRepo_DBAccess_ServiceClient
пример?
Из некоторых примеров, которые я нашел в Интернете, они делают что-то вроде этого:
ServiceHost host = new ServiceHost(typeof(MyService));
ServiceThrottlingBehavior throttleBehavior = new ServiceThrottlingBehavior
{
MaxConcurrentCalls = 40,
MaxConcurrentInstances = 20,
MaxConcurrentSessions = 20,
};
host.Description.Behaviors.Add(throttleBehavior);
host.Open();
Обратите внимание, что в приведенном выше коде они используют ServiceHost
в то время как я не, и они тогда открывают его (с Open()
) тогда как я открываю MusicRepo_DBAccess_ServiceClient
экземпляр... и это то, что меня запутало.
3 ответа
Вы можете указать поведение в файле конфигурации afaik, и сгенерированный клиент будет подчиняться, используя поведения.
Некоторые разделы конфигурации исключены для краткости
<service
behaviorConfiguration="throttleThis" />
<serviceBehaviors>
<behavior name="throttleThis">
<serviceMetadata httpGetEnabled="True" />
<serviceThrottling
maxConcurrentCalls="40"
maxConcurrentInstances="20"
maxConcurrentSessions="20"/>
</behavior>
</serviceBehaviors>
Может быть сделано в коде для тех, кто, как и я, настраивает во время выполнения.
версия vb:
Dim stb As New ServiceThrottlingBehavior
stb.MaxConcurrentSessions = 100
stb.MaxConcurrentCalls = 100
stb.MaxConcurrentInstances = 100
ServiceHost.Description.Behaviors.Add(stb)
версия C#:
ServiceThrottlingBehavior stb = new ServiceThrottlingBehavior {
MaxConcurrentSessions = 100,
MaxConcurrentCalls = 100,
MaxConcurrentInstances = 100
};
ServiceHost.Description.Behaviors.Add(stb);
Регулирование - это поведение на стороне службы (сервера), а не на стороне клиента.
Арнон