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 上没有正确关闭。
有没有办法克服这个问题?
我在这里想念什么?
谢谢,伊兰