これが私のシナリオです。サードパーティのシステム/データベースにレコードを挿入する夜間のバッチ ジョブがあります。これらのインポート呼び出しはすべて、私が作成したプロキシ サービスを介してルーティングされます。これは主に、ファイアウォールのために夜間のバッチ ジョブがサード パーティ サービスに直接接続されていないためです。
したがって、ジョブの実行ごとに 10000 レコードをインポートします。プロキシ サービスへの接続を確立します。プロキシ サービスは、サード パーティの Web サービスへの静的な参照/接続を確立します。現在 (笑わないでください)、プロキシ サービスで各レコードの接続を確立しています。つまり、この 1 つのジョブを実行するために、プロキシ サービスで 10000 回の「OpenConnection」および「CloseConnection」メソッド呼び出しが行われます。私はこの仕事を 1 日 2 回行っています。
私の質問は、最初の Web サービス呼び出しで接続を確立するが、その最初の呼び出しが行われたときに接続を閉じない場合、後続の Web サービス呼び出しは既存の接続を再利用しますか (静的であるため)? それとも、サードパーティ サービスで別のセッションを再作成しますか?
これが機能する場合 (後続の呼び出しのために接続を開いたままにする)、ジョブが完了したときに接続を閉じて、管理されている (または管理されていない) リソースを解放するにはどうすればよいですか? 「CloseConnection」という独自の Web サービスにメソッドを追加したくありません...
それに加えて、当社のサーバーは夜間に自動 IIS RESETS を実行しますが、その時点で接続がまだ開いている場合、接続は適切に破棄されますか?
申し訳ありませんが、このプロセスをスピードアップするという私のタスクを達成するための「ベストプラクティス」アプローチを探しているだけです。
これのコード例を示してみます。バッチ ジョブのコードは次のとおりです。
ws.EstablishConnection();
for (int counter = 0; counter < 10000; counter++)
{
ws.ImportRecord(myRecords[counter]);
}
ws.Dispose();
Web サービス コード:
[WebMethod]
public static void ImportRecord(MyRecord myRecord)
{
try
{
OpenConnection();
_3rdPartyWS.ImportRecord(myRecord);
}
catch (Exception)
{
throw;
}
finally
{
CloseConnection();
}
}