Empfohlene Vorgehensweisen für zuverlässige SitzungenBest Practices for Reliable Sessions

In diesem Thema werden bewährte Vorgehensweisen für zuverlässige Sitzungen.This topic discusses best practices for reliable sessions.

Festlegen von MaxTransferWindowSizeSetting MaxTransferWindowSize

Zuverlässige Sitzungen in Windows Communication Foundation (WCF) verwenden ein Übertragungsfenster, um Nachrichten auf dem Client und Dienst aufzunehmen.Reliable sessions in Windows Communication Foundation (WCF) use a transfer window to hold messages on the client and service. Der konfigurierbare Eigenschaft MaxTransferWindowSize gibt an, wie viele Nachrichten das Übertragungsfenster speichern kann.The configurable property MaxTransferWindowSize indicates how many messages the transfer window can hold.

Auf den Absender gibt dies an, wie viele Nachrichten das Übertragungsfenster während des Wartens auf Bestätigungen speichern kann; beim Empfänger gibt an, wie viele Nachrichten für den Dienst gepuffert werden sollen.On the sender, this indicates how many messages the transfer window can hold while waiting for acknowledgements; on the receiver, it indicates how many messages to buffer for the service.

Auswahl der richtigen Größe wirkt sich auf die Effizienz des Netzwerks und die optimalen Kapazität des Diensts.Choosing the right size impacts the efficiency of the network and the optimal capacity of the service. In den folgenden Abschnitten ausführlich beschrieben was zu berücksichtigen, wenn Sie einen Wert für diese Eigenschaft und die Auswirkungen des Werts auswählen.The following sections detail what to consider when choosing a value for this property and the impact of the value.

Die Standardgröße des übertragungsfensters fasst ist acht Nachrichten.The default transfer window size is eight messages.

Effiziente Verwendung des NetzwerksEfficient use of the network

In diesem Kontext ist der Begriff Netzwerk alles verwendet als Grundlage für die Kommunikation zwischen einem Client (Absender) und einem Dienst (Empfänger) entspricht.In this context, the term network corresponds to everything used as the basis of communication between a client (sender) and a service (receiver). Dies schließt die transportverbindungen und alle Vermittler oder Brücken dazwischen, einschließlich SOAP-Routern oder HTTP-Proxys und-Firewalls.This includes the transport connections and any intermediary or bridges in between, including SOAP routers or HTTP proxies/firewalls.

Die effiziente Verwendung des Netzwerks stellt sicher, dass die Netzwerkkapazität vollständig ausgeschöpft wird.Efficient use of the network ensures that network capacity is fully used. Sowohl die Menge der Daten, die pro Sekunde über das Netzwerk übertragen werden können (Datenrate) und die Zeit, die zum Übertragen von Daten vom Absender zum Empfänger (Latenz) auswirken, wie effizient das Netzwerk wird verwendet.Both the amount of data that can be transferred per second over the network (data rate) and the time it takes to transfer data from the sender to the receiver (latency) impact how effectively the network is utilized.

Für die sendende Seite gibt die Eigenschaft MaxTransferWindowSize an, wie viele Nachrichten das Übertragungsfenster während des Wartens auf Bestätigungen speichern kann.On the sender, the property MaxTransferWindowSize indicates how many messages its transfer window can hold while waiting for acknowledgements. Wenn die Netzwerklatenz hoch ist, und um reaktionsschnelles senden und effiziente Verwendung das Netzwerks sicherzustellen, sollten Sie Größe des übertragungsfensters erhöhen.If the network latency is high and in order to ensure a responsive sender and effective network utilization, you should increase the transfer window size.

Z. B. konnte auch, wenn der Absender mit Datenrate Schritt hält, einrichten, Latenz hoch sein, wenn zahlreiche Vermittler zwischen Sender und Empfänger vorhanden sind oder die Daten über eine verlustbehaftete Durchgangs- oder Netzwerk weitergeleitet.For example even if the sender keeps up with data rate, latency could be high if several intermediaries exist between the sender and receiver or the data must pass through a lossy intermediary or network. Daher muss der Sender auf Bestätigungen für die Nachrichten in seinem Übertragungsfenster warten, bevor Sie akzeptiert neue Nachrichten zu senden.Thus, the sender has to wait for acknowledgements for the messages in its transfer window before accepting new messages to send on the wire. Je kleiner der Puffer mit häufiger Latenz, desto weniger effektiv die Netzwerkverwendung.The smaller the buffer with high latency, the less effective the network utilization. Andererseits, möglicherweise zu hoch Übertragungsfenster des Diensts auswirken, da der Dienst möglicherweise Stand bei der hohen Senderate des vom Client gesendeten Daten.On the other hand, too high a transfer window size may impact the service because the service may need to catch up to the high rate of data sent by the client.

Der Dienst ausgeführt wird, um KapazitätRunning the service to capacity

Wie das Netzwerk effizient genutzt wird, sollten Sie idealerweise auch optimalen Kapazität Ausführung des Dienstes.As much as the network is used efficiently, ideally you also want the service to run at optimal capacity. Die Eigenschaft für die Größe des Übertragungsfensters beim Empfänger gibt an, wie viele Nachrichten der Empfänger puffern kann.The transfer window size property on the receiver indicates how many messages the receiver can buffer. Diese Nachrichtenpufferung hilft nicht nur der Flusssteuerung im Netzwerk, sondern erlaubt dem Client auch, mit voller Kapazität zu laufen.This message buffering helps not only the network flow control but also enables the service to run to full capacity. Z. B., wenn der Puffer ist eine Nachricht und die Nachrichten treffen schneller als der Dienst verarbeitet werden kann Klicken Sie dann das Netzwerk möglicherweise Nachrichten ablegen und Kapazität verschwendet oder unzureichend ausgenutzt werden könnte.For example if the buffer is one message and messages arrive faster than the service can process them, then the network might drop messages and capacity might be wasted or underutilized.

Unter Verwendung eines Puffers erhöht die Verfügbarkeit des Diensts, während es gleichzeitig empfangen und Puffern kann eine Nachricht beim Verarbeiten der zuvor empfangenen Nachrichten.Using a buffer increases the availability of the service as it concurrently receives and buffers a message while processing the previously received messages.

Es wird empfohlen, Sie die gleiche verwenden MaxTransferWindowSize auf dem Absender und Empfänger.We recommended that you use the same MaxTransferWindowSize on both the sender and receiver.

Aktivieren der flusssteuerungEnabling flow control

Flusssteuerung ist ein Mechanismus, der sicherstellt, dass Sender und Empfänger Schritt halten, miteinander, d. h. der Nachrichten genutzt werden und Reaktionen bewirkten so schnell, wie sie erstellt haben.Flow control is a mechanism that ensures that the sender and receiver keep pace with each other, that is, the messages are consumed and acted upon as fast as they're produced. Eine vernünftige Größe des Übertragungsfensters von Client und Dienst stellt sicher, dass Sender und Empfänger ausreichend synchron arbeiten.The transfer window size on the client and service ensures that the sender and receiver are within a reasonable window of synchronization.

Es wird dringend empfohlen, dass Sie die Eigenschaft festlegen FlowControlEnabled auf true bei Verwendung eine zuverlässige Sitzung zwischen einem WCF-Client und einem WCF-Dienst.We highly recommended that you set the property FlowControlEnabled to true when you're using a reliable session between a WCF client and a WCF service.

Festlegen von MaxPendingChannelsSetting MaxPendingChannels

Wenn Sie einen Dienst schreiben, der zuverlässige Sitzungskommunikation mit anderen Clients ermöglicht, ist es möglich, dass viele Clients, die eine zuverlässige Sitzung mit dem Dienst gleichzeitig herzustellen.When writing a service that enables reliable session communication from different clients, it's possible to have many clients establish a reliable session to the service at the same time. Die Antwort des Diensts hängt in diesen Fällen von der MaxPendingChannels-Eigenschaft ab.The response of the service in these situations depends on the MaxPendingChannels property.

Wenn der Sender einen zuverlässige Sitzungskanal zum Empfänger erstellt, dann begründet ein Handshake zwischen ihnen eine zuverlässige Sitzung.When the sender creates a reliable session channel to a receiver, a handshake between them establishes a reliable session. Ist die zuverlässige Sitzung eingerichtet, wird der Kanal für seine Annahme durch den Dienst in eine Warteschlange ausstehender Kanäle eingereiht.After the reliable session is established, the channel is put in a pending channel queue for acceptance by the service. Die MaxPendingChannels-Eigenschaft gibt an, wie viele Kanäle in diesem Zustand sein können.The MaxPendingChannels property indicates how many channels can be in this state.

Es ist möglich, dass der Dienst in einem Zustand, in dem sie weitere Kanäle akzeptieren kann.It's possible for the service to be in a state where it can't accept more channels. Wenn die Warteschlange voll ist, beim Versuch, eine zuverlässige Sitzung herzustellen wird abgelehnt, und der Client muss wiederholen.If the queue is full, an attempt to establish a reliable session is rejected, and the client must retry.

Es ist auch möglich, dass die in der Warteschlange befindenden Kanäle für eine längere Zeit in der Warteschlange bleiben.It's also possible that the pending channels in the queue remain in the queue for a longer duration. In der Zwischenzeit kann in der zuverlässigen Sitzung ein Inaktivitätstimeout auftreten, wodurch der Kanal in einem fehlerhaften Zustand übergeht.In the meantime, an inactivity timeout on the reliable session may occur, causing the channel to transition to a faulted state.

Wenn Sie einen Dienst schreiben, der mehrere Clients gleichzeitig bedient, sollten Sie einen Wert festlegen, der für Ihre Bedürfnisse geeignet ist.When writing a service that services multiple clients simultaneously, you should set a value that's suitable for your needs. Festlegen der zu hohen Wert für die MaxPendingChannels Eigenschaft wirkt sich auf Ihr Workingset.Setting too high a value for the MaxPendingChannels property impacts your working set.

Der Standardwert für MaxPendingChannels vier Kanäle ist.The default value for MaxPendingChannels is four channels.

Zuverlässige Sitzungen und hostingReliable sessions and hosting

Beim Hosten eines Diensts, das zuverlässige Sitzungen verwendet wird, sollten Sie die folgenden wichtigen Überlegungen halten, beachten Sie:When web hosting a service that uses reliable sessions, you should keep the following important considerations in mind:

  • Zuverlässige Sitzungen sind zustandsbehaftet, und der Zustand wird in der AppDomain beibehalten.Reliable sessions are stateful, and state is maintained in the AppDomain. Dies bedeutet, dass alle Nachrichten, die Teil einer zuverlässigen Sitzung sind, in der gleichen AppDomain verarbeitet werden müssen.This means that all messages that are part of a reliable session must be processed in the same AppDomain. Diese Einschränkung können nicht garantieren, Webfarmen und Webgärten, in denen die Größe der Farm oder des Gartens größer als ein Knoten ist.Web farms and web gardens where the size of the farm or garden is greater than one node can't guarantee this constraint.

  • Zuverlässige Sitzungen, die duale HTTP-Kanäle (z. B. WsDualHttpBinding) können mehr als die Standardgröße von zwei HTTP-Verbindungen pro Client erforderlich ist.Reliable sessions using dual HTTP channels (for example, using WsDualHttpBinding) can require more than the default of two HTTP connections per-client. Dies bedeutet, dass eine zuverlässige duplexsitzung bis zu zwei Verbindungen in jede Richtung erfordern kann, da gleichzeitige Anwendungen und Protokollnachrichten jeden Weg und zu einem beliebigen Zeitpunkt übertragen werden können.This means a duplex reliable session can require up to two connections each way because concurrent application and protocol messages may be transferring each way at any given time. Unter bestimmten Umständen das Nachrichtenaustauschmuster des Diensts abhängen bedeutet dies, dass es möglich ist, einen im Web gehosteten Dienst duale HTTP-Verbindungen und zuverlässige Sitzungen ein Deadlock auftreten.Under certain conditions depending on the message exchange pattern of the service, this means that it's possible to deadlock a web-hosted service using dual HTTP and reliable sessions. Fügen Sie zum Erhöhen der Anzahl der zulässigen HTTP-Verbindungen pro Client Folgendes in die entsprechende Konfigurationsdatei (z. B. "Web.config" des betreffenden Diensts):To increase the number of allowable HTTP connections per client, add the following to the relevant configuration file (for example, web.config of the service in question):

    <configuration>
      <system.net>
        <connectionManagement>
          <add name="*" maxconnection="4" />
        </connectionManagement>
      </system.net>
    </configuration>
    

    Der Wert, der die maxconnection Attribut gibt die Anzahl der benötigten Verbindungen.The value of the maxconnection attribute is the number of connections needed. Das Minimum darf in diesem Fall geben vier Verbindungen.The minimum in this case should be four connections.