我的应用程序将驻留在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;
}
我正在努力集思广益,考虑一下为什么会这样。
答案 0 :(得分:2)
从未在愤怒中使用过ASP.NET或AS400,但之前我已经看到过这种行为,它通常表示某种网络问题,通常是反向DNS查询,超时。
假设您已通过防火墙启用ping,请检查您是否可以双向ping。
还要从每台计算机上运行traceroute,以尝试诊断可能出现延迟的位置。
希望有所帮助。
答案 1 :(得分:1)
很抱歉,但我无法告诉你发生了什么,但我只是有几条评论...... 首先,我将输出sql,看看它是否有很多连接和/或正在访问具有大量记录的表(文件)。如果你真的想挖掘你选择的探查器(我使用Ants Profiler)并尝试找到400的探查器 - 看看服务器资源是什么以及通过odbc驱动程序后的实际查询。
我曾经使用asp.net和as400几次,而我最成功的方式实际上是使用带有链接服务器的sql server到AS400。我创建了一个视图,使其更易于使用 - 隐藏as400命名的奇怪之处。它在我的场景中运行良好,因为应用程序需要从sql server中提取信息。
我想我会提到它以防万一...祝你好运
答案 2 :(得分:0)
同时检查iSeries系统的大小。根据查询的大小以及系统在其上运行的应用程序的尺寸不足,这可能需要一些时间。虽然它不应该被视为一种可能性,但我在过去看到过类似的行为。但当然更可能是网络问题。
另一个想法是,如果您可以解决速度问题或者是一个大小调整问题,那就是将其存储在MS SQL Server中,然后将记录从SQL Server写入iSeries。