Wie kann ich das Standardzeitlimit für einen WCF-Dienst auf mehr als 1 Minute erhöhen?
Beziehen Sie sich auf die Serverseite oder die Clientseite?
Für einen Client möchten Sie das sendTimeout - Attribut eines Bindungselements anpassen. Für einen Dienst möchten Sie das Attribut receiveTimeout eines verbindlichen Elements anpassen.
<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>
....
Natürlich müssen Sie den gewünschten Endpunkt der jeweiligen Bindung zuordnen.
Unter dem Menü Extras in Visual Studio 2008 (oder 2005, wenn Sie die richtigen WCF-Dateien installiert haben) gibt es eine Option namens "WCF Service Configuration Editor".
Von dort aus können Sie die Bindungsoptionen für den Client und die Dienste ändern. Eine dieser Optionen wird für Timeouts sein.
Unterschiedliche Timeouts bedeuten verschiedene Dinge. Wenn Sie am Client arbeiten ... schauen Sie wahrscheinlich meistens auf SendTimeout - überprüfen Sie diese Referenz - wunderbare und relevante Erklärung: http://social.msdn.Microsoft.com/Forums/en- US/wcf/thread/84551e45-19a2-4d0d-bcc0-516a4041943d/
Sie haben zwei Möglichkeiten:
1) Nach Code im Client
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) Über WebConfig in einem Webserver
<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>
Für mehr Details sehen Sie die offiziellen Dokumentationen
Zusätzlich zu den Timeouts für die Bindung (die in Timespan
s angegeben sind) benötigen Sie möglicherweise auch diese Option. Dies ist in Sekunden.
<system.web>
<httpRuntime executionTimeout="600"/><!-- = 10 minutes -->