Verwenden von SitzungenUsing Sessions

In Windows Communication Foundation (WCF)-Anwendungen eine Sitzung korreliert eine Gruppe von Nachrichten in einer Konversation.In Windows Communication Foundation (WCF) applications, a session correlates a group of messages into a conversation. WCF--Sitzungen sind anders als das Session-Objekt, das in verfügbar ASP.NETASP.NET Anwendungen, unterstützen andere Verhaltensweisen und auf andere Weise gesteuert werden.WCF sessions are different than the session object available in ASP.NETASP.NET applications, support different behaviors, and are controlled in different ways. Dieses Thema beschreibt die Funktionen, mit denen Sitzungen in WCF-Anwendungen und deren Verwendung.This topic describes the features that sessions enable in WCF 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.

WCF-Sitzungen haben die folgenden Hauptkonzepte:WCF 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.

  • Es ist kein allgemeiner Datenspeicher einer WCF-Sitzung zugeordnet.There is no general data store associated with a WCF session.

Wenn Sie kennen die System.Web.SessionState.HttpSessionState -Klasse im ASP.NETASP.NET Anwendungen und die Funktionalität bietet, fallen Ihnen möglicherweise die folgenden Unterschiede zwischen dieser Art von Sitzung und WCF-Sitzungen: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 WCF 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 Typen der Features, die die sitzungsbasierten, vom System bereitgestellten WCF-Bindungen bereitstellen.The types of features that the WCF 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, das bedeutet, dass bei eines Clients eine sitzungsbasierte Bindung mit einer Implementierung des WCF-Dienst verwendet, der Dienst erstellt und verwendet die angegebene Sitzung.By default, the value of this property is Allowed, which means that if a client uses a session-based binding with a WCF service implementation, the service establishes and uses the session provided.

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

  1. Alle Aufrufe zwischen einem WCF-Clientobjekt werden von der gleichen Dienstinstanz verarbeitet.All calls between a WCF 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.

WCF stellt die folgenden Typen von sitzungsbasierten Verhaltens bereit:WCF 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 WCF an, die zur Laufzeit zu bestätigen, die die Bindung (die den Kommunikationskanal erstellt) konfiguriert, für den Dienst ist, ist dies nicht, oder eine Sitzung aufbauen kann beim Implementieren eines Diensts.It instructs WCF 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 WCF verwenden, werden alle Aufrufe zwischen einem WCF-Objekt von der gleichen Dienstinstanz behandelt.If you use the default instancing behavior in WCF, all calls between a WCF 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.

  • Alle nachfolgenden Aufrufe an den Objektverweis für WCF-Client werden von der gleichen Objektinstanz verarbeitet.All subsequent calls made to the WCF 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 WCF das Dienstobjekt und seinen Kontext wieder, nachdem die Sitzung, der der Dienst zugeordnet war, geschlossen wurde.In the default case, WCF 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. Ein WCF-Dienstvorgang kann ein initiierungs- oder Beendigungsvorgang oder beides gleichzeitig sein.Any WCF 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.

Z. B. die ICalculatorSession Vertrag, der im vorherigen Beispiel verwendet der WCF-Client den ersten Aufruf Objekt muss die Clear Vorgang vor allen anderen Vorgängen, und dass die Sitzung mit dieser WCF-Clientobjekts sollte beim Aufrufen der BeendenEquals Vorgang.For example, the ICalculatorSession contract used in the preceding example requires that the WCF client object first call the Clear operation prior to any other operation and that the session with this WCF 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 WCF-Clientanwendungen ist Sie eine direkte Beziehung zwischen der Lebensdauer des sitzungsbasierten Kanals und die Lebensdauer der Sitzung vorhanden.In WCF 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 für das WCF-Clientobjekt von Svcutil.exe generiert wurde.ClientBase<TChannel>.Close on the WCF client object generated by Svcutil.exe.

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

Beispiele finden Sie unter Vorgehensweise: Erstellen eines Diensts, der Sitzungen erfordert 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 zu Clients und Sitzungen finden Sie unter Zugriff auf Dienste, die mithilfe eines WCF-Clients.For more information about 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 unter Sessions, Instancing und Parallelität.For more information, see 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 Menge der zu übertragenden Daten verfügen, ist der streamingübertragungsmodus in WCF eine praktische Alternative zum Standardverhalten von Puffern und Verarbeiten von Nachrichten im Arbeitsspeicher in ihrer Gesamtheit an.When you have a large amount of data to transfer, the streaming transfer mode in WCF 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