Windowsファイルのインポート方法があり、ボタンを手動でクリックするとアプリケーションは正常に動作しますが、QTP(Quick Test Professional)などのツールを使用してアプリケーションを実行すると同じコードが失敗します
失敗した行を太字で強調しました。 [ remoteStream.Write(buffer, 0, bytesRead);]
using (FileStream localStream = File.OpenRead(filePath))
{
RemoteFile remoteFile = this.serverComponent.GetUploadFileHandle(filePath);
if (remoteFile == null)
{
stopWatch.Stop();
}
using (RemoteFileStream remoteStream = new RemoteFileStream(remoteFile))
{
long localFileSize = localStream.Length;
long readSoFar = 0;
int bytesRead = 0;
byte[] buffer = new byte[bufferSize];
while ((bytesRead = localStream.Read(buffer, 0, bufferSize)) > 0)
{
remoteStream.Write(buffer, 0, bytesRead);
readSoFar += bytesRead;
progressListener.UpdateFileProgress(firmwareID, readSoFar, localFileSize);
}
}
uploadSuccess = this.server.UploadFileDone(remoteFile);
}
stopWatch.Stop();
progressListener.UpdateFileStatus(firmwareID, uploadSuccess ? FirmwareImportStatus.ImportSuccessful : FirmwareImportStatus.ImportFailed);
}
インポートをトリガーする QTP コード。 SwfWindow("Swfname:=ImportFWImagesWF").SwfButton("Swfname:=btnNext","text:=Import").Click
Stream c# クラスをオーバーライドしています。そして、ソケット例外 「System.Net.Sockets.SocketException:既存の接続がリモートホストによって強制的に閉じられました」が発生しています
Stream c# クラスをオーバーライドしています。私のクラス名はRemoteFileStream です
サーバーコード
public override void Write(byte[] buffer, int offset, int count)
{
#region Check Args
if (buffer == null)
{
throw (new ArgumentNullException("The buffer is null"));
}
if (offset < 0 || count < 0)
{
throw (new ArgumentOutOfRangeException("The offset or count is negative."));
}
if (offset + count > buffer.Length)
{
throw (new ArgumentException("The sum of offset and count is larger than the buffer length."));
}
#endregion
_rf.Write(buffer, offset, count);//Exception comes from here
}
注: QTP ツールからアプリケーションにアクセスした場合にのみ、例外が発生します。アプリケーションを手動で実行しても問題はありません。許可の問題のためですか?私を助けてください。