Вопрос

У меня есть приложение, которое будет находиться в сети 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;
}

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

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

Я подумал, что стоит упомянуть об этом, вдруг это поможет...удачи

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top