sábado, 12 de septiembre de 2009

Utilizando conexiones compartidas (UnsafeAuthenticatedConnectionSharing)

En este artículo intentaré explicar un poco como funcionan las peticiones que realizamos a los Web services de CRM, y como podemos "compartir" conexiones para que estas sean mas rápidas.
En primer lugar, al realizar una petición a un web service de CRM, hay que pasarle las credenciales de red del usuario con el que queremos realizar esta petición.
El IIS del CRM entonces lo primero que realiza es abrir una conexión con esas credenciales, antes de ejecutar el propio código del Web Service.
Por cada una de las peticiones que realizamos entonces el IIS hace:
1) Crear y abrir la conexión con las credenciales de red.
2) Ejecutar el método del web service y dar la respuesta correspondiente.
Mediante la propiedad UnsafeAuthenticatedConnectionSharing se podrá evitar que se realice el primer paso por cada una de las llamadas, por lo tanto se ejcutarán de forma mas rápida.
La forma de utilizar este método es la siguiente:

CrmService _localService = new CrmService();
_localService.Credentials = _crmService.Credentials;
_localService.Url = _crmService.Url;

_localService.UnsafeAuthenticatedConnectionSharing = true;

De esta forma, al realizar una petición con el usuario "A", una vez ejecutado el web service, la conexión se mantendrá abierta en vez de cerrarse como haría normalmente. Entonces luego al ejecutarse el con el usuario "B", este accederá con las credenciales de la conexión previamente por el usuario "A".

Obviamente, este código solo debe utilizarse en caso de nuestro desarrollo deba "impersonalizar" la ejecución, ya que sino estaríamos perdiendo el usuario de contexto que ejecuta los Web Services, y adicionalmente
Adicinalmente se deberán tener en consideracion las posibles peligros de seguridad que este funcionamiento puede provocar.

Para más información acerca de esto recomiendo este artículo:
HttpWebRequest.UnsafeAuthenticatedConnectionSharing Property

No hay comentarios:

Publicar un comentario