4

我有一个应用程序将驻留在 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;
}

我正在尝试集思广益,以考虑为什么会发生这种情况。

4

3 回答 3

2

从未愤怒地使用过 ASP.NET 或 AS400,但我以前见过这种行为,它通常表明某种网络问题,通常是反向 DNS 查找超时。

假设您已通过防火墙启用 ping,请检查您是否可以双向 ping。

还要从每台机器上运行 traceroute 以尝试诊断可能出现延迟的位置。

希望有帮助。

于 2009-03-04T01:55:16.763 回答
1

抱歉,我不能告诉你发生了什么,但我只有几条评论......首先我会输出 sql,看看它是否有很多连接和/或正在访问一个大的表(文件)记录的数量。如果您真的想深入挖掘您选择的分析器(我使用 Ants Profiler)并尝试为 400 找到一个分析器 - 查看服务器资源是什么以及通过 odbc 驱动程序后的实际查询。

我曾多次使用过 asp.net 和 as400,而我最成功的方法实际上是使用 sql server 与 AS400 的链接服务器。我创建了一个视图以使其更易于使用 - 隐藏 as400 命名的奇怪之处。它在我的场景中运行良好,因为应用程序无论如何都需要从 sql server 中提取信息。

我想我会提到它以防万一……祝你好运

于 2009-03-04T01:49:29.257 回答
0

还要检查 iSeries 系统的大小。根据查询的大小以及系统对于运行在其上的应用程序而言是否过小,这可能需要一些时间。虽然它不应该作为一种可能性被抛弃,但我过去曾看到过类似的行为。但当然更有可能是网络问题。

如果您可以解决速度问题或大小问题,另一个想法是将其存储在 MS SQL Server 中,然后将记录从 SQL Server 写入 iSeries。

于 2009-03-04T03:39:14.033 回答