Як я можу збільшити тайм-аут за замовчуванням до більшого, ніж на 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 -->