Jak zwiększyć domyślny limit czasu do ponad 1 minuty w usłudze WCF?
Jak zwiększyć domyślny limit czasu do ponad 1 minuty w usłudze WCF?
Odpowiedzi:
Czy masz na myśli stronę serwera czy klienta?
W przypadku klienta chciałbyś dostosować atrybut sendTimeout elementu powiązania. W przypadku usługi chciałbyś dostosować atrybut acceptTimeout elementu powiązania.
<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>
....
Oczywiście musisz zmapować żądany punkt końcowy do tego konkretnego powiązania.
receiveTimeout
stronie serwera zarządza określaniem bezczynności dla powiązań opartych na sesji. Na przykład serwer nie będzie używać tego ustawienia do podstawowych powiązań HTTP. Musisz ustawić własne limity czasu przetwarzania po stronie serwera dla WCF
W menu Narzędzia w programie Visual Studio 2008 (lub 2005, jeśli masz zainstalowane odpowiednie rzeczy WCF) znajduje się opcja o nazwie „Edytor konfiguracji usługi WCF”.
Stamtąd możesz zmienić opcje wiązania zarówno dla klienta, jak i usług, jedna z tych opcji będzie dotyczyła limitów czasu.
Różne limity czasu oznaczają różne rzeczy. Kiedy pracujesz nad klientem ... prawdopodobnie patrzysz głównie na SendTimeout - sprawdź ten odnośnik - wspaniałe i odpowiednie wyjaśnienie: http://social.msdn.microsoft.com/Forums/en-US/wcf/thread / 84551e45-19a2-4d0d-bcc0-516a4041943d /
Możesz wybrać dwa sposoby:
1) Kodem w kliencie
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) Za pomocą konsoli WebConfig na serwerze WWW
<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>
Aby uzyskać więcej informacji, zapoznaj się z oficjalną dokumentacją
Oprócz limitów czasu wiązania (które są w Timespan
s), możesz również tego potrzebować. To zajmie kilka sekund.
<system.web>
<httpRuntime executionTimeout="600"/><!-- = 10 minutes -->