Як я можу збільшити тайм-аут за замовчуванням до більшого, ніж на 1 хвилину, для послуги WCF?
Як я можу збільшити тайм-аут за замовчуванням до більшого, ніж на 1 хвилину, для послуги WCF?
Відповіді:
Ви маєте на увазі сторону сервера чи клієнт?
Для клієнта ви хочете налаштувати атрибут sendTimeout обов'язкового елемента. Для послуги, ви хочете налаштувати ReceiveTimeout атрибут зв'язування elemnent.
<system.serviceModel>
<bindings>
<netTcpBinding>
<binding name="longTimeoutBinding"
receiveTimeout="00:10:00" sendTimeout="00:10:00">
<security mode="None"/>
</binding>
</netTcpBinding>
</bindings>
<services>
<service name="longTimeoutService"
behaviorConfiguration="longTimeoutBehavior">
<endpoint address="net.tcp://localhost/longtimeout/"
binding="netTcpBinding" bindingConfiguration="longTimeoutBinding" />
</service>
....
Звичайно, ви повинні зіставити бажану кінцеву точку саме на цю прив'язку.
receiveTimeoutстороні сервера регулюється визначення холостості для прив'язки на основі сеансу. Наприклад, сервер не використовуватиме цей параметр для базових прив'язокHTTP. Вам доведеться
У меню «Інструменти» у Visual Studio 2008 (або у 2005 році, якщо у вас встановлений правильний файл WCF), є параметри під назвою «Редактор конфігурації служби WCF».
Звідти ви можете змінити параметри прив'язки як для клієнта, так і для служб, один з цих варіантів буде для тайм-аутів.
Різні тайм-аути означають різні речі. Коли ви працюєте з клієнтом .. ви, мабуть, дивитесь переважно на SendTimeout - перевірте це посилання - чудове та відповідне пояснення: http://social.msdn.microsoft.com/Forums/en-US/wcf/thread / 84551e45-19a2-4d0d-bcc0-516a4041943d /
Можна вибрати два способи:
1) За кодом у клієнта
public static void Main()
{
Uri baseAddress = new Uri("http://localhost/MyServer/MyService");
try
{
ServiceHost serviceHost = new ServiceHost(typeof(CalculatorService));
WSHttpBinding binding = new WSHttpBinding();
binding.OpenTimeout = new TimeSpan(0, 10, 0);
binding.CloseTimeout = new TimeSpan(0, 10, 0);
binding.SendTimeout = new TimeSpan(0, 10, 0);
binding.ReceiveTimeout = new TimeSpan(0, 10, 0);
serviceHost.AddServiceEndpoint("ICalculator", binding, baseAddress);
serviceHost.Open();
// The service can now be accessed.
Console.WriteLine("The service is ready.");
Console.WriteLine("Press <ENTER> to terminate service.");
Console.WriteLine();
Console.ReadLine();
}
catch (CommunicationException ex)
{
// Handle exception ...
}
}
2) За допомогою WebConfig на веб-сервері
<configuration>
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding openTimeout="00:10:00"
closeTimeout="00:10:00"
sendTimeout="00:10:00"
receiveTimeout="00:10:00">
</binding>
</wsHttpBinding>
</bindings>
</system.serviceModel>
Для більш детального ознайомлення з офіційними документаціями
Окрім тимчасових тайм-файлів прив’язки (які є в Timespan), вам може знадобитися і це. Це за секунди.
<system.web>
<httpRuntime executionTimeout="600"/><!-- = 10 minutes -->