none
Llamada a WS o Socket con duración acotada RRS feed

  • Pregunta

  • Estimados,

      Buenas tardes, por acá yo nuevamente con algunas dudas existenciales, tengo el siguiente Escenario:

    Oracle Service Bus, que recibe una petición desde un cliente (tiempo máximo disponible para la respuesta 7 segundos), internamente el OSB envía una petición a un WebService desarrollado en C# framework 2.0, y es acá donde tengo mi problema ya que desde este WS tengo comunicación a clientes externos, ya sea a través de WS (diferentes lenguajes) o incluso Socket.

    Mi problema es que cuando esta comunicación se demora más de 7 segundos el OSB automáticamente responde que no fue posible comunicarse con el WS, ya sea por problemas en los clientes o porque mi WS no está operativo, y es en este punto donde necesitamos hacer la distinción, es por ello que se nos ocurrió lo siguiente:

    En el WS Principal (el mio), implementar una serie de mini funciones por cada cliente, y desde este WS controlar que si no ha llegado respuesta por parte del cliente entregar un "NOK_CLIENTE" que identifica que el error esta en el WS o Socket del cliente, mientras que el OSB entregara un "NOK_EMPRESA", ahora mi duda es como implemento estos llamados por tiempo, para los WS de cliente es fácil ya que en el objeto puedo utilizar timeout dentro de un try.. catch pero tengo problemas cuando llamo a un socket, cuando lo hago a una página que responde en el cuerpo los valores que necesito o algo mas... idealmente lo que busco es que quien haga ese control sea la llamada a la minifuncion y así quedará encapsulado para todas las llamadas.

    espero se entienda, desde ya muchas gracias.


    jueves, 19 de enero de 2017 18:08

Respuestas

  • hola. Si el problema radica en que tu servicio realiza operaciones que se demoran mas de 7 segundos y el OSB tiene establecido ese timeout a mi modo de ver puedes hacer dos cosas.

    1.- Aumentar el tiempo de timeout configurado en OSB.

    2.- realizar las operaciones de tu servicio de forma asincrona y devolver al OSB inmediatamente un OK.


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    sábado, 21 de enero de 2017 15:09
    Moderador

Todas las respuestas

  • hola

    cuando invocas servicio podrias indicar un timeout para que falle en caso de exceder ese tiempo

    Setting Timeout Value For .NET Web Service

    al crear la instancia del proxy puede indicar el tiempo, por supuesto seria bueno definir un try..catch para controlar el problema

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 19 de enero de 2017 20:24
  • Hola Leandro, 

      Muchas gracias por tu respuesta, eso es efectivo cuando declaro un objeto como WebService a este le puedo dar un timeout, mi problema radica en los otros tipos de conexiones, las cuales pueden ser:

    a) Llamada a Pagia web

    b) Socket de Conexión

    c) Consulta a Base de datos

    Con la configuración que me entregas, significa que cualquier llamado a una rutina o subrutina no podrá demorar mas de los X segundos dados por configuración?

    Quedo atento a tus comentarios.

    viernes, 20 de enero de 2017 20:17
  • hola. Si el problema radica en que tu servicio realiza operaciones que se demoran mas de 7 segundos y el OSB tiene establecido ese timeout a mi modo de ver puedes hacer dos cosas.

    1.- Aumentar el tiempo de timeout configurado en OSB.

    2.- realizar las operaciones de tu servicio de forma asincrona y devolver al OSB inmediatamente un OK.


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    sábado, 21 de enero de 2017 15:09
    Moderador