4

内部ネットワーク環境で AS400 と通信するビジネス ツー ビジネス ネットワーク内に常駐するアプリケーションがあります。ファイアウォールは AS400 へのデータ リクエストを許可するように設定されていますが、接続速度と応答時​​間に大きな遅延が見られます。たとえば、ローカル開発環境では 0.5 秒未満しかかからなかったのが、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 プロファイラーを使用) を起動して、400 用のプロファイラーを見つけようとする場合は、odbc ドライバーを通過した後のサーバー リソースと実際のクエリを確認します。

私はasp.netとas400を数回使用しましたが、最も成功した方法は、実際にAS400へのリンクサーバーでSQLサーバーを使用することです。as400 命名の奇妙さを隠して、作業を簡単にするビューを作成しました。とにかくアプリケーションがSQLサーバーから情報を取得する必要があるため、私のシナリオではうまくいきました。

役立つ場合に備えて言及すると思いました...幸運を祈ります

于 2009-03-04T01:49:29.257 に答える
0

iSeries システムのサイズも確認してください。クエリのサイズによっては、実行中のアプリケーションに対してシステムのサイズが小さい場合、これには時間がかかる場合があります。可能性として捨てるべきではありませんが、過去に同様の動作を見たことがあります。しかし、もちろん、ネットワークの問題である可能性が高くなります。

速度の問題またはサイジングの問題を解決できる場合のもう1つのアイデアは、MS SQL Serverに保存し、そこからSQL ServerからiSeriesにレコードを書き込むことです。

于 2009-03-04T03:39:14.033 に答える