Voy a aprovechar el hilo para hacer una consulta, y así no lleno el foro con mis neuras
He seguido avanzando en el proyecto, y ahora resulta que, el problema que tenía con la API binaria, y que nos ha obligado a cambiar la forma de comunicarnos con el ERP, ha vuelto... pero en forma de chapa.
Con la API, bajo ciertas circunstancias (que aún no tengo muy claras), genera una excepción que, ejecutándose dentro de IIS como una WebApi, provoca la caída de su "grupo de aplicaciones", y nos obligaba a reiniciar la web manualmente. En ocasiones, el error era tan catastrófico que incluso echaba abajo el servicio W3WP de Windows.
Ahora, usando las peticiones web, bajo unas circunstancias similares, llega un punto en que cualquier petición que le hagamos al HttpClient nos devuelve un error 500 (InternalServerError). Lo que hacemos es que, cuando el usuario se loguea, creamos un HttpClient, y le incrustamos la cookie de autorización, y a partir de ahí lo usamos a lo largo de lo que dure su sesión (por defecto, 30 segundos, aunque para depuración lo tengo a 3 minutos). A diferencia de la otra API, si dejamos que la sesión caduque, y que el código se encargue de reconectar, o si descartamos el HttpClient y creamos otro, todo vuelve a funcionar con normalidad (y de momento, no se ha caído ni el grupo de aplicaciones ni nada).
Sabiendo esto, había pensado hacer que, cada petición del usuario genere un HttpClient, que se use para todas las tareas que deben ejecutarse en dicha petición. Supuestamente, habrá pocos usuarios de la web, y las peticiones entrará una cada 5 a 15 minutos en lugares tranquilos, o 2 por minuto en entornos con más actividad (por ahora, sólo usamos esta API web para peticiones POST y PUT, para el GET seguimos con el sistema antiguo).
Lo que desconozco son las consecuencias que puede acarrear esto. He leído que aunque se deje de usar el HttpClient, su puerto de comunicación sigue en uso durante unos 4 minutos, y puede provocar... no sé si he entendido que se queda sin puertos, o que se le somete a mucho estrés al sistema que los asigna.
Por si acaso, de momento, estoy intentando detectar cuándo entra en "modo negación", y cuando pille un error 500, que desloguée al usuario y reconecte con un HttpClient "fresco". El problema es que tengo que hacer eso con cada petición (o al menos, con las más problemáticas).
Marcadores