He creado un servicio WCF (.NET 3.5) simple que define 10 contratos que son básicamente cálculos en los datos suministrados. Por el momento, espero que bastantes clientes llamen a algunos de estos contratos. ¿Cómo hago que el servicio sea más receptivo? Tengo la sensación de que el servicio esperará hasta que procese una solicitud para pasar a la siguiente. ¿Cómo puedo usar multihebra en WCF para acelerar las cosas?WCF Service and Threading
Respuesta
Aunque estoy de acuerdo con Justin's answer, creo que un poco más de luz puede ser derramada aquí sobre cómo funciona WCF.
a tomar la declaración específica:
Tengo la sensación de que el servicio será esperar a que se procese una solicitud a ir a la siguiente. ¿Cómo puedo usar multihilo en WCF para acelerar las cosas ?
La concurrencia de un servicio (cuántas llamadas puede tomar simultáneamente) depende del ConcurrencyMode
value for the ServiceBehavior
adjunto al servicio. De manera predeterminada, este valor es ConcurrencyMode.Single
, lo que significa que serializará las llamadas una tras otra.
Sin embargo, esto podría no ser tan problemático como cree. Si su servicio es InstanceContextMode
es igual a InstanceContextMode.PerCall
, entonces esto no es un problema; se creará una nueva instancia de su servicio por llamada y no se usará para ninguna otra llamada.
Si tiene un singleton o un objeto de servicio basado en una sesión, sin embargo, las llamadas a esa instancia de la implementación del servicio se serializarán.
Siempre puede cambiar el ConcurrencyMode
, pero tenga en cuenta que si lo hace, tendrá que manejar problemas de concurrencia y acceder a sus recursos manualmente, ya que le ha indicado explícitamente a WCF que lo hará.
Es importante no cambiar esto solo porque cree que dará lugar a un mayor rendimiento. Aunque no tanto por concurrencia, el aspecto de instancias de su servicio forma parte de la identidad del servicio (si es una sesión o no basada en la sesión) y su modificación afecta a los clientes que consumen el servicio, por lo que no lo haga a la ligera
Por supuesto, esto no dice nada si el código que implementa es o no eficiente. Eso es definitivamente algo que debe estudiarse cuando indica que es el caso.
Esto definitivamente es una optimización pre-madura. Implemente sus servicios primero y vea si hay un problema o no.
Creo que encontrará que no se está preocupando por nada. El servidor no bloqueará en una sola solicitud a medida que esa solicitud procese. IIS/WCF debería manejar las cosas por usted como está.
No estoy familiarizado con WCF, pero ¿el proceso puede ser asincrónico? Si está esperando una gran cantidad de datos y cálculos intensivos, una opción podría ser enviar un id
, calcular los valores en un subproceso separado y luego proporcionar un método para devolver el resultado utilizando el id
inicial.
Algo así como:
int id = Service.CalculateX(...);
...
var y = Service.GetResultX(id);
- 1. Try/Catch and threading
- 2. ObservableCollection and threading
- 3. Threading Heap and Stack
- 4. Service Layers and Repositories
- 5. WCF Service vs Windows Service
- 6. WCF Service Client Lifetime
- 7. WCF and Soap 1.1
- 8. WCF Service netTCPbinding
- 9. android service startService() and bindService()
- 10. Service Broker And Web services
- 11. WCF and Kerberos Authentication
- 12. ¿WCF es compatible con Multi-threading?
- 13. wcf json web service
- 14. WCF Service authorization patterns
- 15. WCF Service Throttling
- 16. WCF Service Throttling
- 17. .NET Threading Model and Application.DoEvents vs. Thread.Sleep
- 18. Diferencia entre WCF Service, WCF RIA Services y WCF Data Service
- 19. WCF service maxReceivedMessageSize basicHttpBinding issue
- 20. WCF net.msmq service auto activation
- 21. WCF REST Push Stream Service
- 22. WCF Service in Separate Assembly
- 23. WCF service under https environment
- 24. Exponer IQueryable Over WCF Service
- 25. WCF Service Backwards Compatibility Check
- 26. Compartiendo Enum con WCF Service
- 27. WCF Service Library con NetTcpBinding
- 28. Difference asp.net web service and Ihttphandler
- 29. Service stack and Mocking, any tutorials?
- 30. WCF Data Service - Error de solicitud
Te entiendo bien cuando digo que experimentas respuestas lentas? ¿Cuántas llamadas hace un cliente por ejemplo, digamos? ¿Y qué es lento? –