File.Move System.IO.IOException: "コンピューターが受け入れることができる数の接続が既に存在するため、現時点ではこのリモート コンピューターにこれ以上接続できません"。
SYS アカウントでプロセスを実行しています。ローカル HD 上のファイルを処理し、なりすましを使用してドメイン上のリモート ドライブに移動します。
編集、追加されたコード サンプル:
以下のメソッドが繰り返し呼び出されます (Impersonation は、私が偽装に使用するユーティリティ クラスです。これは問題とは関係ありません)。
private void moveFileUsingImpersonation(string srcFilePath, string dstFilePath, string userName, string passWord)
{
WindowsImpersonationContext wic = null;
// move it to destination
try
{
wic = Impersonation.Impersonate(userName, passWord);
if (wic != null)
{
File.Move(srcFilePath, dstFilePath);
}
else
{
Console.WriteLine("moveFileUsingImpersonation, Failure to impersonate!");
}
}
catch(Exception ex)
{
Console.WriteLine("moveFileUsingImpersonation, Exception={0}", ex.ToString());
}
finally
{
Impersonation.UndoImpersonate(wic);
}
}
編集、コードサンプルを追加。
プロセスが XP マシンで実行されており、リモート ドライブが XP または Win7 マシンのいずれかにある場合、File.Move の呼び出しは問題なく機能し、必要なファイルを移動します。ただし、プロセスが Win7 で実行されており、リモート ドライブが Win7 マシン上にある場合、20 個のファイルが移動された後に前述の例外がスローされます。
また、MOVEFILE_REPLACE_EXISTING & MOVEFILE_COPY_ALLOWED & MOVEFILE_WRITE_THROUGH フラグを指定して win32 API MoveFileEx を呼び出そうとしましたが、同じ結果になりました - ERROR_REQ_NOT_ACCEP 71 (0x47)。
File.Move の呼び出しによって作成された基になる接続が、Win7 で適切に閉じられていないようです。
これを克服する方法はありますか?
ここで何が欠けていますか?
ありがとう、イラン