ASP.NET での AS400 データ接続
-
03-07-2019 - |
質問
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 にレコードを書き込むことです。