Konfigurieren von Timeoutwerten für eine BindungConfiguring Timeout Values on a Binding

Für WCF-Bindungen stehen eine Reihe von Timeouteinstellungen zur Verfügung.There are a number of timeout settings available in WCF bindings. Wenn diese Timeouteinstellungen ordnungsgemäß festgelegt sind, verbessert sich nicht nur die Leistung des Diensts, sondern auch dessen Anwenderfreundlichkeit und Sicherheit.Setting these timeout settings correctly can improve not only your service’s performance but also play a role in the usability and security of your service. Die folgenden Timeouts sind für WCF-Bindungen verfügbar:The following timeouts are available on WCF bindings:

  1. OpenTimeoutOpenTimeout

  2. CloseTimeoutCloseTimeout

  3. SendTimeoutSendTimeout

  4. ReceiveTimeoutReceiveTimeout

WCF-Timeouts für BindungenWCF Binding Timeouts

Jede der in diesem Thema erläuterten Einstellungen wird für die Bindung selbst festgelegt, entweder im Code oder in der Konfiguration.Each of the settings discussed in this topic are made on the binding itself, either in code or configuration. Der folgende Code zeigt, wie Sie programmgesteuert Timeouts für eine WCF-Bindung im Kontext eines selbst gehosteten Diensts festlegen.The following code shows how to programmatically set timeouts on a WCF binding in the context of a self-hosted service.

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 ...
    }
}

Das folgende Beispiel veranschaulicht, wie die Timeouts für eine Bindung in einer Konfigurationsdatei konfiguriert werden.The following example shows how to configure timeouts on a binding in a configuration file.

<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>
</configuration>

Weitere Informationen zu diesen Einstellungen finden Sie in der Dokumentation zur Binding-Klasse.More information about these settings can be found in the documentation for the Binding class.

Clientseitige TimeoutsClient-side Timeouts

Auf der Clientseite:On the client side:

  1. SendTimeout: Wird zur Initialisierung von OperationTimeout verwendet. Die Einstellung steuert den gesamten Sendevorgang einer Nachricht, einschließlich des Empfangs einer Antwortnachricht für einen Vorgang des Anforderung-Antwort-Diensts.SendTimeout – used to initialize the OperationTimeout, which governs the whole process of sending a message, including receiving a reply message for a request/reply service operation. Dieses Timeout gilt auch beim Senden von Antwortnachrichten von einer Rückrufvertragsmethode.This timeout also applies when sending reply messages from a callback contract method.

  2. OpenTimeout: Wird beim Öffnen von Kanälen verwendet, wenn kein expliziter Timeoutwert angegeben ist.OpenTimeout – used when opening channels when no explicit timeout value is specified

  3. CloseTimeout: Wird beim Schließen von Kanälen verwendet, wenn kein expliziter Timeoutwert angegeben ist.CloseTimeout – used when closing channels when no explicit timeout value is specified

  4. ReceiveTimeout: Wird nicht verwendet.ReceiveTimeout – is not used

Dienstseitige TimeoutsService-side Timeouts

Auf der Dienstseite:On the service side:

  1. SendTimeout, OpentTimeout und CloseTimeout sind mit den Einstellungen auf dem Client identisch.SendTimeout, OpentTimeout, CloseTimeout are the same as on the client

  2. ReceiveTimeout: Wird von der Dienstframeworkebene verwendet, um das Timeout für Sitzungen im Leerlauf zu initialisieren, das steuert, wie lange eine Sitzung bis zum Timeout im Leerlauf sein kann.ReceiveTimeout – used by the Service Framework Layer to initialize the session-idle timeout which controls how long a session can be idle before timing out.