iT Synergy Blogs

Growing Innovation - Soluciones a problemas reales

  • Facebook
  • Instagram
  • LinkedIn
  • Phone
  • Twitter
  • YouTube

Copyright © 2023 · iT Synergy·

Service Throttling
Service Throttling avatar

June 13, 2013 By Jaime Alonso Páez torres Leave a Comment

Cuando se están escribiendo servicios web escalables, se necesita ser consciente de ciertas propiedades que aplican a nivel de la clase del servicio y que pueden afectar el desempeño WCF para despachar las solicitudes de un servicio.

InstanceContextMode y ConcurrencyMode

Estas propiedades son InstanceContextMode y ConcurrencyMode. En pocas palabras, InstanceContextMode controla cuando una nueva instancia de un servicio es creada y ConcurrencyMode controla la forma como las solicitudes pueden ser atendidas simultáneamente.

  • InstanceContextMode = InstanceContextMode.PerSession (valor por defecto)

PerCall una instancia del servicio por cada llamado del método que haga el cliente, PerSession solo una instancia del servicio existe por cada sesión que posea el cliente WCF; Single, una única instancia del servicio es creada para todos los clientes.

  • ConcurrencyMode = ConcurrencyMode.Single (valor por defecto)

               La siguiente tabla muestra cuando una operación puede ser invocada mientras hay otra en progreso, dependiendo del ConcurrencyMode.

ConcurrencyMode

Puede una nueva operación ser invocada?

Single

Nunca

Reentrant

Solamente cuando invoca otro servicio o un callback

Multiple

Siempre

Formas de elegir,

InstanceContextMode.Percall

Considere este modo instancia en estas circunstancias:

  • Si su servicio es sin estado.
  • Si su servicio tiene código de inicialización de peso ligero (o ninguna). No aplica si por ejemplo, consulta una base de datos o crear gráficos de grandes objetos en memoria)
  • Si su servicio es de un solo hilo de ejecución.

 

InstanceContextMode.PerSession (Por defecto)

Considere este modo de instancia en estas circunstancias:

  • Si su servicio debe mantener algún estado entre las llamadas del mismo cliente.
  • Si su servicio tiene código de inicialización de peso ligero (o ninguna).

Nota: De forma predeterminada, WCF utilizará PerSession siempre y cuando el cliente y el servicio se estén comunicando a través de un binding que admita estado de sesión. De lo contrario, el servicio se comportará como un servicio PerCall.

El desarrollador puede para eso, colocar una restricción utilizando la propiedad ServiceContractAttribute.SessionMode que se puede aplicar a su contrato de servicio. Con eso, si cualquier endpoint configurado para su servicio no soporta sesiones el servicio fallara al iniciar.

 

<ServiceContract(Name:="SampleDuplexHello", Namespace:="http://microsoft.wcf", CallbackContract:=GetType(IHelloCallbackContract), SessionMode:=SessionMode.Required)>

Public Interface IDuplexHello

<OperationContract(IsOneWay:=True)> _

Sub Hello(ByVal greeting As String)

End Interface

InstanceContextMode.Single

  Considere este modo instancia en estas circunstancias:

  • Si su servicio debe mantener algún Estado entre clientes.
  • El servicio tiene código de inicialización caro. Es decir, al inicializar por cada cliente (PerSession) o por cada llamada (PerCall) sería demasiado costoso.
  • No hay necesidad de escalar horizontalmente el servicio.

  Tener en cuenta las consideraciones para balanceo de cargas en WCF en una granja de servidores.

 

Posibles escenarios

Para resumir unos ejemplos de posibles escenarios básicos, que suceden cuando 100 clientes simultáneamente invocan un método de un servicio.

  • Escenario 1: InstanceContextMode.Single+ConcurrencyMode.Single

                    Resultado: 100 invocaciones secuenciales del método en un hilo.

  • Escenario 2: InstanceContextMode.Single+ConcurrencyMode.Multiple

                    Resultado: N invocaciones concurrentes del método en N hilos, donde N es determinado por el service throttle MaxConcurrentCalls.

  • Escenario 3:InstanceContextMode.PerCall+Any ConcurrencyMode

                      Resultado: N invocaciones concurrentes del método en N instancias del servicio, donde N es determinado por el service throttle MaxConcurrentInstances.

           Link relacionado, http://kennyw.com/indigo/178

Filed Under: WCF Tagged With: ConcurrencyMode, InstanceContextMode, PerCall, PerSession, Service Throttling, Single, WCF

Team


Marco
Antonio Hernández

Jaime
Alonso Páez

Luis
Carlos Bernal

Ana
María Orozco

Juan
Camilo Zapata

Carlos
Alberto Rueda

Sonia
Elizabeth Soriano

Diana
Díaz Grijalba

Bernardo
Enrique Cardales

Alexandra
Bravo Restrepo

Juan
Alberto Vélez

Diana
Paola Padilla

Jhon
Jairo Rodriguez

Yully
Arias Castillo

Carlos
Andrés Vélez

Brayan
Ruiz

Jesús
Javier Hernández

Alejandro
Garcia Forero

Gustavo
Adolfo Echeverry

Josué
Leonardo Bohórquez

Oscar
Alberto Urrea

Odahir
Rolando Salcedo

Jimmy
Quejada Meneses

Natalia
Zartha Suárez

Mario
Andrés Cortés

Eric
Yovanny Martinez

Carolina
Torres Rodríguez

Juan
Mauricio García

Tag Cloud

.NET (9) 940px (1) Analysis Services mdx (1) An attempt was made to load a program with an incorrect format. (1) ASP.NET MVC (1) Azure (3) Backup (1) BAM (7) BAM API (1) BAMTraceException (2) BI (3) BizTalk (24) Business Intelligence (6) C# (2) caracteristicas de publicacion (2) Content Editor (3) ESB (15) ESB Toolkit (3) General (4) habilitar caracteristicas (3) indexes (2) Integration Services (2) Master Page (3) MDX (2) MSE (11) net.tcp (2) Office 365 (2) Oracle (2) Performance Point (2) Public Website (2) Receive Location (2) SDK (2) Servicio Web (2) Sharepoint 2010 (2) SharePoint 2013 (4) SharePoint Online (2) SOA (8) Soap Fault (2) Sort Months MDX (2) SQL Server (2) Visual (2) Visual Studio 2010 (2) WCF (19) Windows (3) Windows 8 (17)

Categories

  • .NET (33)
  • Analysis Services (1)
  • ASP.NET MVC (2)
  • Azure (7)
  • BAM (9)
  • BAM PrimaryImport (3)
  • BigData (1)
  • BizTalk (77)
  • BizTalk 2010 configurations (57)
  • BizTalk Application (60)
  • BizTalk Services (13)
  • Business Intelligence (4)
  • Cloud (3)
  • CMD (1)
  • CodeSmith – NetTiers (2)
  • CommandPrompt (1)
  • CRM OptionSet mapping component (1)
  • Desarrollo de software (6)
  • develop (6)
  • developers (3)
  • DropBox (1)
  • Dynamics (1)
  • Enterprise Architect (1)
  • Entity Framework (1)
  • Errores BizTalk (2)
  • ESB (27)
  • ETL (1)
  • Event Viewer (1)
  • Excel Services (1)
  • Foreach loop container (1)
  • General (4)
  • Gerencia de Proyectos (2)
  • Google (1)
  • Grouped Slices (1)
  • Human Talent (1)
  • IIS (4)
  • Integración (6)
  • Integration Services (3)
  • KingswaySoft (1)
  • Lync (1)
  • MSE (13)
  • Office 365 (2)
  • Oracle Data Adapter (2)
  • Performance Point (4)
  • Picklist (1)
  • Pivot Table (1)
  • Procesos (1)
  • Pruebas (1)
  • Public Website (2)
  • Reports (1)
  • SCRUM (1)
  • SDK (2)
  • SEO (1)
  • Servicios (2)
  • Sharepoint (9)
  • SharePoint 2010 (10)
  • SharePoint 2013 (4)
  • SharePoint Online (2)
  • SharpBox (1)
  • Shortcuts (1)
  • Sin categoría (1)
  • SOA (50)
  • SQL (5)
  • SQL Server (3)
  • SQL Server Management Studio (1)
  • SSIS (3)
  • SSL (1)
  • SSO (1)
  • Tracking Profile Editor (2)
  • Twitter (1)
  • Uncategorized (1)
  • Virtual Network (2)
  • Visual Studio 11 (1)
  • Visual Studio 2010 (2)
  • Visual Studio Online (1)
  • VMware (2)
  • WCF (24)
  • Web (1)
  • Web Api (1)
  • Windows (5)
  • Windows 8 (11)
  • Windows Azure (2)
  • Windows Live Write (1)
  • Windows Phone (7)
  • Windows Phone 8 (1)
  • Windows Scheduler (1)
  • windows8 (2)
  • WindowsRT (3)
  • WP7 SDK (1)

Manage

  • Log in
  • Entries feed
  • Comments feed
  • WordPress.org