문제

나는있다 C# 서비스 저것 지속적으로 실행됩니다 사용자 자격 증명을 사용하면 (즉, 로컬 시스템이 아님 - 원하지만 변경할 수는 없습니다). 대부분의 경우 서비스는 괜찮은 것처럼 보이지만 너무 자주 폭탄이 나고 명백한 이유없이 다시 시작합니다 (Servicer Manager는 충돌시 서비스를 다시 시작하도록 설정되어 있습니다).

나는 상당한 일을하고있다 이벤트 로깅, 그리고 나는 a 레이어드 접근법 에게 예외 처리 나는 적어도 어떤 의미가 있다고 믿는다.

  • 본질적으로 나는 그것을 얻었다 최상위 레벨 일반적인 예외, null 예외 및 시작 예외 처리기.
  • 그런 다음 나는 다양한 핸들러를 얻었습니다.명령 수준"(즉, 서비스가 실행되는 특정 조치)
  • 마지막으로 나는 몇 가지 예외를 처리합니다 수업 수준

자원이 제대로 출시되지 않았는지 여부를보고 있으며 메일 링 코드 (이메일 보내기)를 의심하기 시작했습니다. 나는 내가 처분하지 않았다는 것을 알았다. 우편 메이지 개체, 그리고 이제 아래 그림과 같이 Sendmail 코드를 다시 작성했습니다.

그만큼 기본 질문 이다:

  • 이 코드는 메일을 보내는 데 사용되는 모든 리소스를 올바르게 해제합니까?
  • 나는 방법이 없다 처분하십시오smtpclient 객체?
  • (레코드의 경우 : 샘플을 더 쉽게 읽을 수 있도록 Object Initializer를 사용하지 않습니다)
    private static void SendMail(string subject, string html)
    {
        try
        {
            using ( var m = new MailMessage() )
            {
                m.From = new MailAddress("service@company.com");
                m.To.Add("user@company.com");
                m.Priority = MailPriority.Normal;
                m.IsBodyHtml = true;
                m.Subject = subject;
                m.Body = html;
                var smtp = new SmtpClient("mailhost");
                smtp.Send(m);
            }
        }
        catch (Exception ex)
        {
            throw new MyMailException("Mail error.", ex);
        }
    }
도움이 되었습니까?

해결책

이 질문은 사전 .NET 4라는 것을 알고 있지만 버전 4는 이제 종료를 SMPT 서버로 올바르게 보내는 Dispose 메소드를 지원합니다. 참조 MSDN 참조 그리고 새로운 stackoverflow 질문.

다른 팁

거기 있습니다 문서화 된 문제 smtpclient 클래스와 함께. 너무 비싸지 않기 때문에 타사 컨트롤을 구입하는 것이 좋습니다. Chilkat은 괜찮은 것을 만듭니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top