У меня есть подпрограмма Windows Service, которая написана на [C #]. Net с использованием VS 2010, которая обращается к БД один раз в день, и если есть какие-либо записи, которые необходимо устранить Этим владельцам записей будет отправлено электронное письмо через сервер Exchange.
Для первых нескольких записей электронные письма отправляются нормально, но после 4-го или 5-го электронного письма я получаю сообщение об ошибке, как показано
Service failed at :System.Net.WebException: The underlying connection was closed: An unexpected error occurred on a send. ---> System.IO.IOException: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host. ---> System.Net.Sockets.SocketException: An existing connection was forcibly closed by the remote host
at System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags)
at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
--- End of inner exception stack trace ---
at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
at System.Net.FixedSizeReader.ReadPacket(Byte[] buffer, Int32 offset, Int32 count)
at System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.ForceAuthentication(Boolean receiveFirst, Byte[] buffer, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.ProcessAuthentication(LazyAsyncResult lazyResult)
at System.Net.TlsStream.CallProcessAuthentication(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Net.TlsStream.ProcessAuthentication(LazyAsyncResult result)
at System.Net.TlsStream.Write(Byte[] buffer, Int32 offset, Int32 size)
at System.Net.PooledStream.Write(Byte[] buffer, Int32 offset, Int32 size)
at System.Net.ConnectStream.WriteHeaders(Boolean async)
--- End of inner exception stack trace ---
at System.Net.HttpWebRequest.GetResponse()
at Microsoft.Exchange.WebServices.Data.ServiceRequestBase.Emit(HttpWebRequest& request)
at Microsoft.Exchange.WebServices.Data.ServiceRequestBase.ValidateAndEmitRequest(HttpWebRequest& request)
Если я отлаживаю процедуру с точками останова, она работает нормально. Но когда я запускаю его без каких-либо точек останова, я получаю вышеуказанную ошибку.
Вот фрагмент кода, в котором моя программа отправляет электронные письма:
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP1);
lock (service)
{
if (service == null)
throw new Exception("service is null");
service.Credentials = new WebCredentials(data[0], data[1]);
service.Url = new Uri("https://owa.CompanyName.com/ews/exchange.asmx");
service.Timeout = 1200000;
EmailMessage message = new EmailMessage(service);
if (message == null)
throw new Exception("message is null");
message.Subject = "Test Email";
message.Body = "This is a Test EMail Please use the below link to update ";
//message.ToRecipients.Add(docList[0].CreatorEmailID);
message.ToRecipients.Add("EmailID@gmail.com");
for (int j = 0; j < emailList.Count; j++)
{
message.CcRecipients.Add("EmailID@gmail.com”);
}
System.Threading.Thread.Sleep(1000);
ServicePointManager.ServerCertificateValidationCallback += ignoreCertCallback;
try
{
message.Send();
}
finally
{
ServicePointManager.ServerCertificateValidationCallback -= ignoreCertCallback;
}
}
Я использовал Microsoft Exchange WebService в качестве веб-ссылки здесь.
Я пытался погуглить, но это не помогло мне. Я был бы очень рад, если бы кто-то мог помочь мне в этом вопросе.