AS400 Data Connection в ASP.NET - PullRequest
       48

AS400 Data Connection в ASP.NET

4 голосов
/ 03 марта 2009

У меня есть приложение, которое будет находиться в сети business2business, которая будет взаимодействовать с нашим AS400 в нашей внутренней сетевой среде. Брандмауэр был настроен для пропуска запроса данных на наш AS400, но мы наблюдаем огромное отставание в скорости соединения и времени отклика. Например, то, что в наших локальных средах разработки занимает менее полсекунды, в среде B2B занимает более 120 секунд.

Это функция, которую мы используем для получения наших данных. Мы используем блоки приложений корпоративной библиотеки, поэтому объект ASI - это база данных ...

/// <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;
}

Я пытаюсь провести мозговой штурм по некоторым идеям, чтобы понять, почему это происходит.

Ответы [ 3 ]

2 голосов
/ 04 марта 2009

Никогда не использовал ASP.NET или AS400 в гневе, но я уже видел подобное поведение раньше, и оно обычно указывало на какие-то проблемы с сетью, как правило, обратный поиск DNS, который истекает по времени.

Предполагая, что пинг включен через брандмауэр, убедитесь, что вы можете пинговать в обоих направлениях.

Также запустите traceroute с каждой машины, чтобы попытаться определить причину задержки.

Надеюсь, это поможет.

1 голос
/ 04 марта 2009

Извините, но я не могу сказать вам, что происходит, но у меня есть пара комментариев ... Сначала я бы вывел sql, посмотрел, есть ли в нем много объединений и / или нет таблицы (файла) с большим количеством записей. Если вы действительно хотите раскопать, запустите выбранный вами профилировщик (я использую Ants Profiler) и попробуйте найти профилировщик для 400 - посмотрите, каковы ресурсы сервера, так и фактический запрос после его прохождения через драйвер odbc. *

Я работал с asp.net и as400 несколько раз, и наиболее успешный способ - использовать sql-сервер со связанным сервером с AS400. Я создал вид, чтобы с ним было проще работать - скрывая странности именования as400. В моем сценарии это работало хорошо, потому что приложение все равно должно было получать информацию с сервера sql.

Я подумал, что упомяну это, если это поможет ... удачи

0 голосов
/ 04 марта 2009

Проверьте также размер вашей системы iSeries. В зависимости от размера запроса и размера системы для приложений, выполняющихся на нем, это может занять некоторое время. Хотя это не должно быть выброшено как возможность, я видел подобное поведение в прошлом. Но, конечно, более вероятна проблема с сетью.

Другая идея, если вы можете решить проблему со скоростью или проблему с размерами, это сохранить ее на MS SQL Server, а затем записать записи с SQL Server на iSeries.

...