C# 自动重试连接
我正在尝试使用TCPCLIENT通过.NET构建一个检查器 对于每封检查我的应用程序的电子邮件,我的服务器和smtp服务器之间都建立了连接,这意味着smtp服务器有时没有响应 我想问的问题是如何不断尝试连接 如果没有接通 这是我的密码:C# 自动重试连接,c#,.net,tcpclient,C#,.net,Tcpclient,我正在尝试使用TCPCLIENT通过.NET构建一个检查器 对于每封检查我的应用程序的电子邮件,我的服务器和smtp服务器之间都建立了连接,这意味着smtp服务器有时没有响应 我想问的问题是如何不断尝试连接 如果没有接通 这是我的密码: TcpClient tClient = new TcpClient("smtp-in.orange.fr", 25); string CRLF = "\r\n"; byte[] dataBuffer; string ResponseString; Networ
TcpClient tClient = new TcpClient("smtp-in.orange.fr", 25);
string CRLF = "\r\n";
byte[] dataBuffer;
string ResponseString;
NetworkStream netStream = tClient.GetStream();
StreamReader reader = new StreamReader(netStream);
ResponseString = reader.ReadLine();
/* Perform HELO to SMTP Server and get Response */
dataBuffer = BytesFromString("HELO KirtanHere" + CRLF);
netStream.Write(dataBuffer, 0, dataBuffer.Length);
ResponseString = reader.ReadLine();
dataBuffer = BytesFromString("mail from:<contact@contact.com>" + CRLF);
netStream.Write(dataBuffer, 0, dataBuffer.Length);
ResponseString = reader.ReadLine();
TcpClient tClient=新的TcpClient(“smtp in.orange.fr”,25);
字符串CRLF=“\r\n”;
字节[]数据缓冲;
弦乐;
NetworkStream netStream=tClient.GetStream();
StreamReader=新的StreamReader(netStream);
ResponseString=reader.ReadLine();
/*对SMTP服务器执行HELO并获取响应*/
dataBuffer=BytesFromString(“HELO KirtanHere”+CRLF);
Write(dataBuffer,0,dataBuffer.Length);
ResponseString=reader.ReadLine();
dataBuffer=BytesFromString(“邮件发件人:+CRLF”);
Write(dataBuffer,0,dataBuffer.Length);
ResponseString=reader.ReadLine();
似乎您需要在for循环内部实现try-catch块
for (var i = 0; i < retryCount; i++)
{
try
{
YourAction();
break; // success
}
catch { /*ignored*/ }
// give a little breath..
Thread.Sleep(50);
}
一个解决方案是使用波利图书馆 使用Polly,您需要将策略配置为您希望重试的场景 请指定您的例外策略,如下所示
var maxRetryAttempts = 3;
var pauseBetweenFailures = TimeSpan.FromSeconds(2);
var retryPolicy = Policy
.Handle<Exception>()// Handle specific exception
.WaitAndRetryAsync(maxRetryAttempts, i => pauseBetweenFailures);
关于如何使用Polly的详细说明,这里有一篇很好的文章
var maxRetryAttempts = 3;
var pauseBetweenFailures = TimeSpan.FromSeconds(2);
var retryPolicy = Policy
.Handle<Exception>()// Handle specific exception
.WaitAndRetryAsync(maxRetryAttempts, i => pauseBetweenFailures);
await retryPolicy.ExecuteAsync(async () =>
{
TcpClient tClient = new TcpClient("smtp-in.orange.fr", 25);
string CRLF = "\r\n";
byte[] dataBuffer;
.....
});