Pregunta

Tengo una aplicación que residirá dentro de una red business2business que se comunicará con nuestro AS400 en nuestro entorno de red interno. El firewall se ha configurado para permitir la solicitud de datos a través de nuestro AS400, pero estamos viendo un gran retraso en la velocidad de conexión y el tiempo de respuesta. Por ejemplo, lo que toma menos de medio segundo en nuestros entornos de desarrollo local está demorando más de 120 segundos en nuestro entorno B2B.

Esta es la función que estamos utilizando para obtener nuestros datos. Estamos utilizando los bloques de aplicaciones de la biblioteca empresarial, por lo que el objeto ASI es la base de datos ...

/// <summary>
/// Generic function to retrieve data table from AS400
/// </summary>
/// <param name="sql">SQL String</param>
/// <returns></returns>
private DataTable GetASIDataTable(string sql)
{
    DataTable tbl = null;

    HttpContext.Current.Trace.Warn("GetASIDataTable(" + sql + ") BEGIN");
    using (var cmd = ASI.GetSqlStringCommand(sql))
    {
        using (var ds = ASI.ExecuteDataSet(cmd))
        {
            if (ds.Tables.Count > 0) tbl = ds.Tables[0];
        }
    }
    HttpContext.Current.Trace.Warn("GetASIDataTable() END");
    return tbl;
}

Estoy tratando de hacer una lluvia de ideas sobre algunas ideas para considerar por qué ocurre esto.

¿Fue útil?

Solución

Nunca he usado ASP.NET o AS400 enojados, pero he visto este tipo de comportamiento antes y generalmente indicaba algún tipo de problema de red, normalmente una búsqueda de DNS inversa que caduca.

Suponiendo que tiene habilitado el ping a través de su firewall, verifique que pueda hacer ping en ambas direcciones.

También ejecute traceroute desde cada máquina para intentar diagnosticar dónde podría haber un retraso.

Espero que ayude.

Otros consejos

Lo siento, pero no puedo decirte lo que está pasando, pero solo tengo un par de comentarios ... Primero daría salida al sql, a ver si tiene muchas combinaciones y / o está golpeando una tabla (archivo) con una gran cantidad de registros. Si realmente desea profundizar en el fuego, seleccione el perfilador de su elección (yo uso Ants Profiler) e intente encontrar un perfilador para el 400 - vea cuáles son los recursos del servidor y la consulta real después de que pase por el controlador odbc.

He trabajado con asp.net y as400 varias veces y la forma en que he tenido más éxito es utilizando el servidor SQL con un servidor vinculado a AS400. Creé una vista para simplificar el trabajo, ocultando las rarezas de los nombres de as400. Funcionó bien en mi escenario porque la aplicación necesitaba extraer información del servidor SQL de todos modos.

Pensé que lo mencionaría en caso de que ayude ... la mejor de las suertes

Verifique también el tamaño de su sistema iSeries. Dependiendo del tamaño de la consulta y de si el sistema es de tamaño insuficiente para las aplicaciones que se ejecutan en él, esto puede llevar tiempo. Si bien no se debe descartar como una posibilidad, he visto un comportamiento similar en el pasado. Pero, por supuesto, es más probable que sea un problema de red.

La otra idea si puede resolver el problema de la velocidad o si es un problema de tamaño es almacenarlo en un MS SQL Server y luego escribir los registros de SQL Server al iSeries desde allí.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top