SSH를 통해 자동화하려고 시도했지만 서버에 결함이있어 exec 채널을 올바르게 구현하지 않아 CreateShellStream()
을 사용하여 문제를 해결했습니다. 나는 프로그램을 실행할 때 연결을 사용할 수 없으며 단절이 일어날 것이라고 예상 할 수 있습니다. 내 솔루션 :SshStream이 더 이상 유효하지 않을 때 SshStream.Expect()가 코드를 중단합니다.
while(!_cancellationToken.IsCancellationRequested))
{
ShellStream stream = null;
while(stream == null)
{
stream = await GetSshStream();
}
while(stream.CanWrite && stream.CanRead)
{
stream.WriteLine(command);
//this breaks everything if stream is not valid
var rep = stream.Expect(new Regex(@"[$>]"));
var delimiters = new[] { " ", "\r\n", "\t" };
var values = rep.Split(delimiters, StringSplitOptions.RemoveEmptyEntries);
DealWithValues(values);
}
}
이것은 작동하며 연결을 기다리고 com을 시작합니다. 이 문제가 발생하면 stream.CanWrite && stream.CanRead
은 충분하지 않으므로 stream
이 정상이며 연결이 끊어지고 스트림이 유효하지 않게되고 Expect();
과 함께 사용되면 모든 문제가 발생합니다. 모든 루프에서 튀어 나와 try {} catch{}
을 통과하고 심지어 Visual Studio 디버거를 단계별로 분해하고 다른 스레드 (멀티 스레드 프로그램)에서 프로그램을 계속 진행합니다. 이 일을 막고 실행을 첫 번째로 던지는 방법이 있습니까 while
? 서버에 액세스 할 필요가있을 때마다 새 스트림을 만들 수 있지만 매번 한 번 폴링 매개 변수를 사용하면 매번 다시 연결하는 오버 헤드가 발생하지 않으려 고합니다.