Verwenden von SitzungenUsing Sessions

In Windows Communication Foundation (WCF)Windows Communication Foundation (WCF) -Anwendungen verknüpft eine Sitzung eine Gruppe von Nachrichten zu einer Konversation.In Windows Communication Foundation (WCF)Windows Communication Foundation (WCF) applications, a session correlates a group of messages into a conversation. WCFWCF -Sitzungen unterscheiden sich von dem in ASP.NETASP.NET -Anwendungen verfügbaren Sitzungsobjekt, unterstützen andere Verhaltensweisen und werden auf andere Weise gesteuert. sessions are different than the session object available in ASP.NETASP.NET applications, support different behaviors, and are controlled in different ways. In diesem Thema werden die Funktionen, die Sitzungen in WCFWCF -Anwendungen ermöglichen, beschrieben und deren Verwendung erläutert.This topic describes the features that sessions enable in WCFWCF applications and how to use them.

Sitzungen in Windows Communication Foundation-AnwendungenSessions in Windows Communication Foundation Applications

Wenn ein Dienstvertrag angibt, dass er eine Sitzung benötigt, bedeutet dies, dass alle Aufrufe (das heißt der zugrunde liegende Nachrichtenaustausch, durch den die Aufrufe unterstützt werden) Teil derselben Konversation sein müssen.When a service contract specifies that it requires a session, that contract is specifying that all calls (that is, the underlying message exchanges that support the calls) must be part of the same conversation. Falls in einem Vertrag angegeben wird, dass Sitzungen zwar erlaubt, aber nicht erforderlich sind, können Clients eine Verbindung herstellen und eine Sitzung aufbauen oder auch nicht.If a contract specifies that it allows sessions but does not require one, clients can connect and either establish a session or not establish a session. Wird eine Sitzung beendet und eine Nachricht über denselben Kanal gesendet, wird eine Ausnahme ausgelöst.If the session ends and a message is sent through the same channel an exception is thrown.

BeiWCFWCF -Sitzungen finden sich die folgenden Hauptkonzepte:WCFWCF sessions have the following main conceptual features:

  • Sie werden explizit von der aufrufenden Anwendung (dem WCF-Client) initiiert und beendet.They are explicitly initiated and terminated by the calling application (the WCF client).

  • Die während einer Sitzung gesendeten Nachrichten werden in der Reihenfolge verarbeitet, in der sie empfangen wurden.Messages delivered during a session are processed in the order in which they are received.

  • Durch Sitzungen wird eine Gruppe von Nachrichten zu einer Konversation zusammengefasst.Sessions correlate a group of messages into a conversation. Es sind verschiedene Korrelationstypen möglich.Different types of correlation are possible. So werden zum Beispiel bei einem sitzungsbasierten Kanal Nachrichten auf Grundlage einer gemeinsamen Netzwerkverbindung zueinander in Beziehung gesetzt, bei einem anderen Kanal geschieht dies wiederum auf Grundlage eines gemeinsamen Tags im Nachrichtentext.For instance, one session-based channel may correlate messages based on a shared network connection while another session-based channel may correlate messages based on a shared tag in the message body. Die Funktionen, die von der Sitzung abgeleitet werden können, sind abhängig von der Art der Korrelation.The features that can be derived from the session depend on the nature of the correlation.

  • Einer WCFWCF -Sitzung ist kein allgemeiner Datenspeicher zugeordnet.There is no general data store associated with a WCFWCF session.

Falls Sie mit der System.Web.SessionState.HttpSessionState-Klasse und den von ihr bereitgestellten Funktionen in ASP.NETASP.NET-Anwendungen vertraut sind, fallen Ihnen möglicherweise die folgenden Unterschiede zwischen dieser Art von Sitzung und einer WCFWCF-Sitzung auf:If you are familiar with the System.Web.SessionState.HttpSessionState class in ASP.NETASP.NET applications and the functionality it provides, you might notice the following differences between that kind of session and WCFWCF sessions:

  • ASP.NETASP.NET-Sitzungen werden immer vom Server initiiert. sessions are always server-initiated.

  • ASP.NETASP.NET -Sitzungen sind implizit nicht sortiert. sessions are implicitly unordered.

  • ASP.NETASP.NET -Sitzungen stellen einen allgemeinen Datenspeicher für Anforderungen bereit. sessions provide a general data storage mechanism across requests.

Dieses Thema beschreibt Folgendes:This topic describes:

  • Das Standardausführungsverhalten bei Verwendung sitzungsbasierter Bindungen auf DienstmodellebeneThe default execution behavior when using session-based bindings in the service model layer.

  • Die Funktionstypen, die die sitzungsbasierten, systemeigenen Bindungen von WCFWCF bereitstellen.The types of features that the WCFWCF session-based, system-provided bindings provide.

  • Erstellen eines Vertrags, der eine Sitzungsanforderung deklariertHow to create a contract that declares a session requirement.

  • Verstehen und Steuern der Erstellung und Beendigung einer Sitzung sowie der Beziehung zwischen der Sitzung und der DienstinstanzHow to understand and control the creation and termination of the session and the relationship of the session to the service instance.

Standardausführungsverhalten mit SitzungenDefault Execution Behavior Using Sessions

Eine Bindung, die eine Sitzung zu initiieren versucht, wird als sitzungsbasierte Bindung bezeichnet.A binding that attempts to initiate a session is called a session-based binding. Dienstverträge geben an, dass sie sitzungsbasierte Bindungen erfordern, zulassen oder verweigern, indem sie die ServiceContractAttribute.SessionMode-Eigenschaft in der Dienstvertragschnittstelle (oder -klasse) auf einen der System.ServiceModel.SessionMode-Enumerationswerte festlegen.Service contracts specify that they require, permit, or refuse session-based bindings by setting the ServiceContractAttribute.SessionMode property on the service contract interface (or class) to one of the System.ServiceModel.SessionMode enumeration values. Standardmäßig ist der Wert dieser Eigenschaft Allowed. Dies bedeutet, dass der Dienst die bereitgestellte Sitzung aufbaut und verwendet, wenn ein Client eine sitzungsbasierte Bindung mit einer WCFWCF -Dienstimplementierung verwendet.By default, the value of this property is Allowed, which means that if a client uses a session-based binding with a WCFWCF service implementation, the service establishes and uses the session provided.

Wenn ein WCFWCF -Dienst eine Clientsitzung akzeptiert, werden die folgenden Funktionen standardmäßig aktiviert:When a WCFWCF service accepts a client session, the following features are enabled by default:

  1. Alle Aufrufe zwischen einem WCFWCF -Clientobjekt werden von der gleichen Dienstinstanz verarbeitet.All calls between a WCFWCF client object are handled by the same service instance.

  2. Andere sitzungsbasierte Bindungen stellen zusätzliche Funktionen bereit.Different session-based bindings provide additional features.

Vom System bereitgestellte SitzungstypenSystem-Provided Session Types

Eine sitzungsbasierte Bindung unterstützt die Standardzuordnung einer Dienstinstanz zu einer bestimmten Sitzung.A session-based binding supports the default association of a service instance with a particular session. Andere sitzungsbasierte Bindungen ermöglichen nicht nur die zuvor beschriebene sitzungsbasierte Instanziierungssteuerung, sondern unterstützen darüber hinaus andere Funktionen.However, different session-based bindings support different features in addition to enabling the session-based instancing control previously described.

WCFWCF stellt die folgenden Typen eines sitzungsbasierten Verhaltens bereit: provides the following types of session-based application behavior:

Durch Festlegen der SessionMode -Eigenschaft wird nicht der vom Vertrag angeforderte Typ der Sitzung angegeben, sondern nur, dass eine Sitzung erforderlich ist.Setting the SessionMode property does not specify the type of session the contract requires, only that it requires one.

Erstellen eines Vertrags, der eine Sitzung erfordertCreating a Contract That Requires a Session

Beim Erstellen eines Vertrags, der eine Sitzung erfordert, wird angegeben, dass die gesamte Gruppe von Vorgängen, die der Dienstvertrag deklariert, innerhalb derselben Sitzung ausgeführt werden muss und dass Nachrichten der Reihenfolge nach zugestellt werden müssen.Creating a contract that requires a session states that the group of operations that the service contract declares must all be executed within the same session and that messages must be delivered in order. Zum Bestätigen der Ebene der Sitzungsunterstützung, die ein Dienstvertrag erfordert, legen Sie die ServiceContractAttribute.SessionMode-Eigenschaft der Dienstvertragschnittstelle oder -klasse auf den Wert der System.ServiceModel.SessionMode-Enumeration fest. Damit geben Sie an, ob der Vertrag:To assert the level of session support that a service contract requires, set the ServiceContractAttribute.SessionMode property on your service contract interface or class to the value of the System.ServiceModel.SessionMode enumeration to specify whether the contract:

  • Eine Sitzung erfordert.Requires a session.

  • Es einem Client ermöglicht, eine Sitzung aufzubauen.Allows a client to establish a session.

  • Eine Sitzung verhindert.Prohibits a session.

Durch Festlegen der SessionMode -Eigenschaft wird allerdings nicht der vom Vertrag angeforderte Typ des sitzungsbasierten Verhaltens angegeben.Setting the SessionMode property does not, however, specify the type of session-based behavior the contract requires. Sie weist WCFWCF an, zur Laufzeit zu bestätigen, dass die konfigurierte Bindung (die den Kommunikationskanal erstellt) für den Dienst eine Sitzung aufbaut, keine Sitzung aufbaut oder eine Sitzung aufbauen kann, wenn ein Dienst implementiert wird.It instructs WCFWCF to confirm at runtime that the configured binding (which creates the communication channel) for the service does, does not, or can establish a session when implementing a service. Die Bindung kann diese Anforderung wiederum mit einem beliebigen, von ihr gewählten Typ eines sitzungsbasierten Verhaltens erfüllen – Sicherheit, Transport, Zuverlässigkeit oder eine Kombination daraus.Again, the binding can satisfy that requirement with any type of session-based behavior it chooses—security, transport, reliable, or some combination. Das genaue Verhalten hängt vom ausgewählten System.ServiceModel.SessionMode-Wert ab.The exact behavior depends on the System.ServiceModel.SessionMode value selected. Wenn die konfigurierte Bindung des Diensts nicht dem Wert von SessionModeentspricht, wird eine Ausnahme ausgelöst.If the configured binding of the service does not conform to the value of SessionMode, an exception is thrown. Bindungen und die von ihnen erstellten Kanäle, die Sitzungen unterstützen, werden als sitzungsbasiert bezeichnet.Bindings and the channels they create that support sessions are said to be session-based.

Der folgende Dienstvertrag gibt an, dass alle Vorgänge in ICalculatorSession innerhalb einer Sitzung ausgetauscht werden müssen.The following service contract specifies that all operations in the ICalculatorSession must be exchanged within a session. Mit Ausnahme der Equals -Methode gibt keiner der Vorgänge einen Wert an den Aufrufer zurück.None of the operations returns a value to the caller except the Equals method. Die Equals -Methode verwendet jedoch keine Parameter und kann daher nur einen Wert ungleich 0 (null) innerhalb der Sitzung zurückgeben, in der Daten bereits an die anderen Vorgänge übergeben wurden.However, the Equals method takes no parameters and, therefore, can only return a non-zero value inside a session in which data has already been passed to the other operations. Dieser Vertrag erfordert, dass eine Sitzung ordnungsgemäß funktioniert.This contract requires a session to function properly. Ist keine Sitzung einem bestimmten Client zugeordnet, kann die Dienstinstanz nicht ermitteln, welche Daten dieser Client bereits gesendet hat.Without a session associated with a specific client, the service instance has no way of knowing what previous data this client has sent.

[ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples", SessionMode=SessionMode.Required)]
public interface ICalculatorSession
{
    [OperationContract(IsOneWay=true)]
    void Clear();
    [OperationContract(IsOneWay = true)]
    void AddTo(double n);
    [OperationContract(IsOneWay = true)]
    void SubtractFrom(double n);
    [OperationContract(IsOneWay = true)]
    void MultiplyBy(double n);
    [OperationContract(IsOneWay = true)]
    void DivideBy(double n);
    [OperationContract]
    double Equals();
}
<ServiceContract(Namespace:="http://Microsoft.ServiceModel.Samples", SessionMode:=SessionMode.Required)> _
Public Interface ICalculatorSession

    <OperationContract(IsOneWay:=True)> _
    Sub Clear()
    <OperationContract(IsOneWay:=True)> _
    Sub AddTo(ByVal n As Double)
    <OperationContract(IsOneWay:=True)> _
    Sub SubtractFrom(ByVal n As Double)
    <OperationContract(IsOneWay:=True)> _
    Sub MultiplyBy(ByVal n As Double)
    <OperationContract(IsOneWay:=True)> _
    Sub DivideBy(ByVal n As Double)
    <OperationContract()> _
    Function Equal() As Double
End Interface

Wenn ein Dienst eine Sitzung zulässt, wird die Sitzung aufgebaut und verwendet, wenn der Client eine Sitzung initiiert, andernfalls wird keine Sitzung aufgebaut.If a service allows a session, then a session is established and used if the client initiates one; otherwise, no session is established.

Sitzungen und DienstinstanzenSessions and Service Instances

Wenn Sie das Standardinstanziierungsverhalten in WCFWCFverwenden, werden alle Aufrufe zwischen einem WCFWCF -Clientobjekt von der gleichen Dienstinstanz behandelt.If you use the default instancing behavior in WCFWCF, all calls between a WCFWCF client object are handled by the same service instance. Daher können Sie sich eine Sitzung auf Anwendungsebene so vorstellen, dass sie ein Anwendungsverhalten ermöglicht, das dem lokalen Aufrufverhalten ähnlich ist.Therefore, at the application level, you can think of a session as enabling application behavior similar to local call behavior. Wenn Sie zum Beispiel ein lokales Objekt erstellen:For example, when you create a local object:

  • Wird ein Konstruktor aufgerufen.A constructor is called.

  • Werden alle nachfolgenden Aufrufe an den WCFWCF -Clientobjektverweis von der gleichen Objektinstanz verarbeitet.All subsequent calls made to the WCFWCF client object reference are processed by the same object instance.

  • Wird ein Destruktor aufgerufen, wenn der Objektverweis gelöscht wird.A destructor is called when the object reference is destroyed.

Sitzungen ermöglichen ein ähnliches Verhalten zwischen Clients und Diensten, solange das Standardverhalten der Dienstinstanz verwendet wird.Sessions enable a similar behavior between clients and services as long as the default service instance behavior is used. Wenn ein Dienstvertrag Sitzungen erfordert oder unterstützt, kann mindestens ein Vorgang durch Festlegen der IsInitiating -Eigenschaft und der IsTerminating -Eigenschaft zum Initiieren oder Beenden einer Sitzung angegeben werden.If a service contract requires or supports sessions, one or more contract operations can be marked as initiating or terminating a session by setting the IsInitiating and IsTerminating properties.

Initiierungsvorgänge sind Vorgänge, die als erster Vorgang einer neuen Sitzung aufgerufen werden müssen.Initiating operations are those that must be called as the first operation of a new session. Nicht-Initiierungsvorgänge können nur aufgerufen werden, nachdem mindestens ein Initiierungsvorgang aufgerufen wurde.Non-initiating operations can be called only after at least one initiating operation has been called. Sie können folglich eine Art Sitzungskonstruktor für den Dienst erstellen, indem Sie Initiierungsvorgänge deklarieren, die dazu gedacht sind, Eingaben von Clients anzunehmen, die sich für den Anfang der Dienstinstanz eignen.You can therefore create a kind of session constructor for your service by declaring initiating operations designed to take input from clients appropriate to the beginning of the service instance. (Der Zustand ist jedoch der Sitzung zugeordnet, nicht dem Dienstobjekt.)(The state is associated with the session, however, and not the service object.)

Beendigungsvorgängesind dagegen Vorgänge, die als letzte Nachricht in einer vorhandenen Sitzung aufgerufen werden müssen.Terminating operations, conversely, are those that must be called as the last message in an existing session. Im Standardfall verwendet WCFWCF das Dienstobjekt und seinen Kontext wieder, nachdem die Sitzung, die dem der Dienst zugeordnet war, geschlossen wurde.In the default case, WCFWCF recycles the service object and its context after the session with which the service was associated is closed. Sie können folglich eine Art Destruktor erstellen, indem Sie Beendigungsvorgänge deklarieren, die zum Ausführen einer Funktion gedacht sind, die sich für das Ende der Dienstinstanz eignet.You can, therefore, create a kind of destructor by declaring terminating operations designed to perform a function appropriate to the end of the service instance.

Hinweis

Das Standardverhalten ist lokalen Konstruktoren und Destruktoren ähnlich, aber eben nur ähnlich.Although the default behavior bears a resemblance to local constructors and destructors, it is only a resemblance. Jeder WCFWCF -Dienstvorgang kann ein Initiierungs- oder ein Beendigungsvorgang oder beides gleichzeitig sein.Any WCFWCF service operation can be an initiating or terminating operation, or both at the same time. Außerdem können Initiierungsvorgänge im Standardfall beliebig oft in einer beliebigen Reihenfolge aufgerufen werden, nachdem der erste Vorgang aufgerufen wurde. Es werden keine zusätzlichen Sitzungen erstellt, sobald die Sitzung aufgebaut und einer Instanz zugeordnet wurde, es sei denn, Sie steuern die Lebensdauer der Dienstinstanz explizit (durch Bearbeiten des System.ServiceModel.InstanceContext-Objekts).In addition, in the default case, initiating operations can be called any number of times in any order; no additional sessions are created once the session is established and associated with an instance unless you explicitly control the lifetime of the service instance (by manipulating the System.ServiceModel.InstanceContext object). Der Zustand wird schließlich der Sitzung zugeordnet, nicht dem Dienstobjekt.Finally, the state is associated with the session and not the service object.

Der im vorhergehenden Beispiel verwendete ICalculatorSession -Vertrag erfordert z.&#160;B., dass das WCFWCF -Clientobjekt den Clear -Vorgang vor allen anderen Vorgängen aufruft und dass die Sitzungen mit diesem WCFWCF -Clientobjekt beendet werden sollen, wenn der Equals -Vorgang aufgerufen wird.For example, the ICalculatorSession contract used in the preceding example requires that the WCFWCF client object first call the Clear operation prior to any other operation and that the session with this WCFWCF client object should terminate when it calls the Equals operation. Das folgende Codebeispiel zeigt einen Vertrag, der diese Anforderungen erzwingt.The following code example shows a contract that enforces these requirements. Clear muss zuerst aufgerufen werden, um eine Sitzung zu initiieren. Diese Sitzung endet, wenn Equals aufgerufen wird.Clear must be called first to initiate a session, and that session ends when Equals is called.

[ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples", SessionMode=SessionMode.Required)]
public interface ICalculatorSession
{
    [OperationContract(IsOneWay=true, IsInitiating=true, IsTerminating=false)]
    void Clear();
    [OperationContract(IsOneWay = true, IsInitiating = false, IsTerminating = false)]
    void AddTo(double n);
    [OperationContract(IsOneWay = true, IsInitiating = false, IsTerminating = false)]
    void SubtractFrom(double n);
    [OperationContract(IsOneWay = true, IsInitiating = false, IsTerminating = false)]
    void MultiplyBy(double n);
    [OperationContract(IsOneWay = true, IsInitiating = false, IsTerminating = false)]
    void DivideBy(double n);
    [OperationContract(IsInitiating = false, IsTerminating = true)]
    double Equals();
}
<ServiceContract(Namespace:="http://Microsoft.ServiceModel.Samples", SessionMode:=SessionMode.Required)> _
Public Interface ICalculatorSession

    <OperationContract(IsOneWay:=True, IsInitiating:=True, IsTerminating:=False)> _
    Sub Clear()
    <OperationContract(IsOneWay:=True, IsInitiating:=False, IsTerminating:=False)> _
    Sub AddTo(ByVal n As Double)
    <OperationContract(IsOneWay:=True, IsInitiating:=False, IsTerminating:=False)> _
    Sub SubtractFrom(ByVal n As Double)
    <OperationContract(IsOneWay:=True, IsInitiating:=False, IsTerminating:=False)> _
    Sub MultiplyBy(ByVal n As Double)
    <OperationContract(IsOneWay:=True, IsInitiating:=False, IsTerminating:=False)> _
    Sub DivideBy(ByVal n As Double)
    <OperationContract(IsInitiating:=False, IsTerminating:=True)> _
    Function Equal() As Double
End Interface

Dienste starten keine Sitzungen mit Clients.Services do not start sessions with clients. In WCFWCF -Clientanwendungen gibt es eine direkte Beziehung zwischen der Lebensdauer des sitzungsbasierten Kanals und der Lebensdauer der Sitzung.In WCFWCF client applications, a direct relationship exists between the lifetime of the session-based channel and the lifetime of the session itself. Aus diesem Grund erstellen Clients neue Sitzungen, indem sie neue sitzungsbasierte Kanäle erstellen, und beenden bestehende Sitzungen, indem sie sitzungsbasierte Kanäle ordnungsgemäß schließen.As such, clients create new sessions by creating new session-based channels and tear down existing sessions by closing session-based channels gracefully. Ein Client startet eine Sitzung mit einem Dienstendpunkt, indem er einen der folgenden Vorgänge aufruft:A client starts a session with a service endpoint by calling one of the following:

Ein Client beendet eine Sitzung in der Regel mit einem Dienstendpunkt, indem er einen der folgenden Vorgänge aufruft:Typically a client ends a session with a service endpoint by calling one of the following:

  • ICommunicationObject.Close auf dem Kanal, das durch einen Aufruf an ChannelFactory<TChannel>.CreateChannel zurückgegeben wurde.ICommunicationObject.Close on the channel returned by a call to ChannelFactory<TChannel>.CreateChannel.

  • ClientBase<TChannel>.Close am WCFWCF-Clientobjekt, das von Svcutil.exe generiert wurde.ClientBase<TChannel>.Close on the WCFWCF client object generated by Svcutil.exe.

  • Einen Beendigungsvorgang für einen Typ eines WCFWCF -Clientobjekts (standardmäßig sind Vorgänge nie Beendigungsvorgänge, der Vertrag muss einen Beendigungsvorgang explizit angeben).A terminating operation on either type of WCFWCF client object (by default, no operations are terminating; the contract must explicitly specify a terminating operation). Wenn der erste Vorgang aufgerufen wird, öffnet das WCFWCF -Clientobjekt den Kanal automatisch und initiiert eine Sitzung.When the first operation is called, the WCFWCF client object automatically opens the channel and initiates a session.

Beispiele finden Sie unter How to: Create a Service That Requires Sessions sowie unter Default Service Behavior und Instancing .For examples, see How to: Create a Service That Requires Sessions as well as the Default Service Behavior and Instancing samples.

Weitere Informationen finden Sie unterFor more information aboutClients und Sitzungen finden Sie unter beim Zugriff auf Dienste, die mithilfe eines WCF-Clients. clients and sessions, see Accessing Services Using a WCF Client.

Interaktion von Sitzungen und InstanceContext-EinstellungenSessions Interact with InstanceContext Settings

Zwischen der SessionMode-Enumeration in einem Vertrag und der ServiceBehaviorAttribute.InstanceContextMode-Eigenschaft gibt es eine Interaktion, durch die die Zuordnung zwischen Kanälen und bestimmten Dienstobjekten gesteuert wird.There is an interaction between the SessionMode enumeration in a contract and the ServiceBehaviorAttribute.InstanceContextMode property, which controls the association between channels and specific service objects. Weitere Informationen finden Sie unterFor more information, seeSitzungen, Instanziierung und Parallelität. Sessions, Instancing, and Concurrency.

Freigeben von InstanceContext-ObjektenSharing InstanceContext Objects

Sie können auch steuern, welcher sitzungsbasierte Kanal oder Aufruf welchem InstanceContext -Objekt zugeordnet wird, indem Sie diese Zuordnung selbst vornehmen.You can also control which session-based channel or call is associated with which InstanceContext object by performing that association yourself. Ein vollständiges Beispiel finden Sie unter InstanceContextSharing.For a complete example, see InstanceContextSharing.

Sitzungen und StreamingSessions and Streaming

Wenn Sie eine große Datenmenge übertragen müssen, ist der Streamingübertragungsmodus in WCFWCF eine praktische Alternative zum Standardverhalten, bei dem vollständiger Nachrichten im Arbeitsspeicher bepuffert und verarbeitet werden.When you have a large amount of data to transfer, the streaming transfer mode in WCFWCF is a feasible alternative to the default behavior of buffering and processing messages in memory in their entirety. Möglicherweise tritt beim Streaming von Aufrufen mit einer sitzungsbasierten Bindung ein unerwartetes Verhalten auf.You may get unexpected behavior when streaming calls with a session-based binding. Alle Streamingaufrufe erfolgen über einen einzigen Kanal (den Datagrammkanal), der keine Sitzungen unterstützt, selbst wenn die verwendete Bindung für die Verwendung von Sitzungen konfiguriert ist.All streaming calls are made through a single channel (the datagram channel) that does not support sessions even if the binding being used is configured to use sessions. Wenn mehrere Clients über eine sitzungsbasierte Bindung Streamingaufrufe an das gleiche Dienstobjekt senden und der Parallelitätsmodus des Dienstobjekts auf "single" und sein Instanzkontextmodus auf PerSessionfestgelegt ist, müssen alle Aufrufe den Datagrammkanal passieren, sodass immer nur jeweils ein Aufruf verarbeitet wird.If multiple clients make streaming calls to the same service object over a session-based binding, and the service object's concurrency mode is set to single and its instance context mode is set to PerSession, all calls must go through the datagram channel and so only one call is processed at a time. Bei einem oder mehreren Clients kommt es dabei unter Umständen zu einem Timeout. Sie können dieses Problem umgehen, indem Sie entweder den InstanceContextMode des Dienstobjekts auf PerCall oder die Parallelität auf "multiple" festlegen.One or more clients may then time out. You can work around this issue by either setting the service object's InstanceContextMode to PerCall or Concurrency to multiple.

Hinweis

MaxConcurrentSessions hat in diesem Fall keine Auswirkungen, da nur eine Sitzung verfügbar ist.MaxConcurrentSessions have no effect in this case because there is only one "session" available.

Siehe auchSee Also

IsInitiating
IsTerminating