質問

business2business ネットワーク内に常駐し、内部ネットワーク環境の 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;
}

なぜこれが起こっているのかを検討するために、いくつかのアイデアをブレインストーミングしようとしています。

役に立ちましたか?

解決

ASP.NET や AS400 を怒って使ったことはありませんが、この種の動作を以前に見たことがあり、通常は何らかのネットワークの問題、通常はタイムアウトになっている逆引き DNS ルックアップを示していました。

ファイアウォール経由で ping が有効になっていると仮定して、両方向に ping できることを確認してください。

また、各マシンからtracerouteを実行して、遅延が発生している可能性がある場所を診断してください。

それが役立つことを願っています。

他のヒント

申し訳ありませんが、何が起こっているのかは言えませんが、いくつかコメントがあります...まず SQL を出力して、大量の結合があるかどうか、または大量のレコードを含むテーブル (ファイル) にアクセスしているかどうかを確認します。本当に詳しく知りたい場合は、選択したプロファイラー (私は Ants Profiler を使用しています) を起動して 400 用のプロファイラーを探してみてください。サーバー リソースと、ODBC ドライバーを通過した後の実際のクエリを確認してください。

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

役に立つかもしれないので言及しておこうと思いました...幸運を祈ります

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top