问题描述
我有一个 BizTalk 自定义管道组件,用于写入 SFTP 文件(使用 SSH.net),由 SFTP (WinSCP) 接收位置触发。
重试中的代码偶尔(大约有一半的时间)既未命中“成功”,也未命中日志捕获块,并且管道内不会发生进一步的处理。我认为这意味着线程已被销毁。
我稍后添加了 Retry 代码以使其尝试几次,但随着线程被破坏,我并不总是成功或 3 次失败。
什么可能导致 BizTalk 2016 出现这种行为?
public void Archive(byte[] content,string archivePath,string userName,string password,string serverAddress,string sshHostKeyFingerprint)
{
Retry(3,() =>
{
try
{
using (var sftpClient = new SftpClient(serverAddress,userName,password))
{
if (!string.IsNullOrWhiteSpace(sshHostKeyFingerprint))
{
sshHostKeyFingerprint = sshHostKeyFingerprint.Split(' ').Last();
sftpClient.HostKeyReceived += delegate (object sender,HostKeyEventArgs e)
{
if (e.FingerPrint.SequenceEqual(ConvertFingerprintToByteArray(sshHostKeyFingerprint)))
e.CanTrust = true;
else
e.CanTrust = false;
};
}
sftpClient.Connect();
sftpClient.WriteallBytes(archivePath,content);
sftpClient.disconnect();
LogInfo($"Success");
}
}
catch (Exception exception)
{
// show the bad path for "No such file" errors
throw new InvalidOperationException($"Failed to create file '{archivePath}'",exception);
}
});
}
private void Retry(int maxAttempts,Action action)
{
int attempt = 1;
while (attempt <= maxAttempts)
{
try
{
action();
break; // success
}
catch (Exception exception)
{
LogWarning($"Attempt {attempt} Error: {exception.ToString()}");
if (attempt == maxAttempts)
throw; // final attempt exception propagated
}
finally
{
attempt++;
}
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)