Wie kann ich das Standardzeitlimit für einen WCF-Dienst auf mehr als 1 Minute erhöhen?
Wie kann ich das Standardzeitlimit für einen WCF-Dienst auf mehr als 1 Minute erhöhen?
Antworten:
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 Bindungselements 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 Ihren gewünschten Endpunkt dieser bestimmten Bindung zuordnen.
receiveTimeout
auf der Bestimmung des Nichtstuns regelt Server - Seite für sitzungsbasierten Bindungen. Beispielsweise verwendet der Server diese Einstellung nicht für grundlegende HTTP-Bindungen. Sie müssen Ihre eigenen serverseitigen Verarbeitungszeitlimits für WCF
Unter dem Menü Extras in Visual Studio 2008 (oder 2005, wenn Sie das richtige WCF-Material installiert haben) gibt es eine Option namens "WCF Service Configuration Editor".
Von dort aus können Sie die Bindungsoptionen sowohl für den Client als auch für die Services ändern. Eine dieser Optionen ist eine Zeitüberschreitung.
Unterschiedliche Zeitüberschreitungen bedeuten unterschiedliche Dinge. Wenn Sie am Client arbeiten, sehen Sie sich wahrscheinlich hauptsächlich das SendTimeout an - überprüfen Sie diese Referenz - eine wunderbare und relevante Erklärung: http://social.msdn.microsoft.com/Forums/en-US/wcf/thread / 84551e45-19a2-4d0d-bcc0-516a4041943d /
Sie können zwei Möglichkeiten wählen:
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) Von WebConfig auf 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>
Weitere Einzelheiten finden Sie in den offiziellen Dokumentationen
Zusätzlich zu den Bindungszeitüberschreitungen (die in Timespan
s angegeben sind) benötigen Sie möglicherweise auch diese. Dies ist in Sekunden.
<system.web>
<httpRuntime executionTimeout="600"/><!-- = 10 minutes -->