ServiceThrottlingBehavior.MaxConcurrentSessions Propiedad
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Obtiene o establece un valor que especifica el número máximo de sesiones que un objeto ServiceHost puede aceptar en un momento dado.
public:
property int MaxConcurrentSessions { int get(); void set(int value); };
public int MaxConcurrentSessions { get; set; }
member this.MaxConcurrentSessions : int with get, set
Public Property MaxConcurrentSessions As Integer
Valor de propiedad
Número máximo de sesiones que un host de servicio acepta. El valor predeterminado es 100 veces el número de procesadores.
Ejemplos
El siguiente ejemplo de código muestra el uso de ServiceThrottlingBehavior desde un archivo de configuración de la aplicación que establece el valor 1 en MaxConcurrentSessions, MaxConcurrentCalls y las propiedades MaxConcurrentInstances, como ejemplo. La experiencia real determina cuáles son los valores óptimos para cualquier aplicación determinada.
<configuration>
<appSettings>
<!-- use appSetting to configure base address provided by host -->
<add key="baseAddress" value="http://localhost:8080/ServiceMetadata" />
</appSettings>
<system.serviceModel>
<services>
<service
name="Microsoft.WCF.Documentation.SampleService"
behaviorConfiguration="Throttled" >
<host>
<baseAddresses>
<add baseAddress="http://localhost:8080/SampleService"/>
</baseAddresses>
</host>
<endpoint
address=""
binding="wsHttpBinding"
contract="Microsoft.WCF.Documentation.ISampleService"
/>
<endpoint
address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange"
/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="Throttled">
<serviceThrottling
maxConcurrentCalls="1"
maxConcurrentSessions="1"
maxConcurrentInstances="1"
/>
<serviceMetadata
httpGetEnabled="true"
httpGetUrl=""
/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
Comentarios
La propiedad MaxConcurrentSessions especifica el número máximo de sesiones que un objeto ServiceHost puede aceptar. Es importante entender que las sesiones en este caso no significan sólo canales que admiten sesiones fiables (por ejemplo, System.ServiceModel.NetNamedPipeBinding admite sesiones pero no incluye sesiones fiables).
Cada objeto de agente de escucha puede tener una sesión de canal pendiente que no cuente con el valor de MaxConcurrentSessions hasta que WCF acepte la sesión del canal y comience a procesar los mensajes en él. Esta propiedad resulta muy útil en situaciones que utilizan sesiones.
Cuando esta propiedad está establecida con un valor menor que el número de subprocesos del cliente, las solicitudes de varios clientes se pueden poner en la cola en la misma conexión de socket. Las solicitudes del cliente que no ha creado una sesión con el servicio se bloquearán hasta que el servicio cierre su sesión con los otros clientes si el número de sesiones abiertas en el servicio ha alcanzado MaxConcurrentSessions
. Las solicitudes de cliente que no se sirven caducan y el servicio cierra abruptamente la sesión.
Para evitar esta situación, ejecute los subprocesos del cliente desde dominios de aplicación diferentes para que los mensajes de solicitud entren en conexiones de socket diferentes.
También puede establecer los valores de este atributo mediante el <elemento serviceThrottling> en un archivo de configuración de la aplicación.