2012-07-13 2 views
0

저는 다양한 아이디어를 통해 이메일 뉴스 레터를 보내려고하고 있으며 매회 막히게되었습니다.모니터링에 대한 조언 ASP.NET에서 성공한 뉴스 레터 보내기

현재 공유 호스트 환경을 사용하고 있으며이 환경에서 안정적인 환경이 필요합니다.

배치 서비스를 배경 서비스로 보낸 예약 된 시스템을 만들고 싶었습니다.이 환경에서는이 일을 할 수 없었기 때문에 지금은 .NET 양식의 AJAX 오랜 시간 게시로 간단히 처리하고 있습니다. 기능.

나는 이메일을 보내는 공통 기능을 가지고 있고,

For Each email In list 
    If Common.isValidEmail(email("email")) Then 
     Try 
      Common.sendEmail(email("email"), Common.tCase(email("email")), content, subject, "true", "newsletter", "customer") 
     Catch ex As Exception 
      errorList += email("id") & "," 
     End Try 
    Else 
     Common.changeData("DELETE FROM mailingList WHERE id='" & email("id") & "'") 
    End If 
Next 

을 다음과 같이 이메일이 적절한 경우 나, 여기에 isValidEmail 기능 검사를 두 개의 잠재적 인 오류의 경우를 잡는 오전 일을 내 데이터베이스를 통해 반복하고, 그리고 그런 다음 메일을 보내 봅니다. 실패하면 오류 목록을 작성합니다.

그러나 서비스가 중단되면 좋지 않습니다.

그래서 각 이메일 주소에 대해 "전송 된"플래그를 데이터베이스 행에 추가하여 수정하려고합니다. 그러나 이것은 모든 단일 루프에 대해 데이터베이스에 쓰기를 필요로합니다.이 속도가 필연적으로 느려 집니까?

언제든지 데이터베이스가 다시 표시되어 플래그가 지정되지 않은 사용자에게 다시 보낼 수 있습니다.

누구보다 좋은 아이디어가 있습니까?!

장기간에 걸쳐 저는 이것을 백그라운드 서비스로하고 Azure로 마이그레이션하는 것을 고려했습니다. 스케줄 된 백그라운드 서비스를 실행할 수 있으면 좋겠지 만 지금은 공유 환경으로 해결 방법이 필요합니다.

답변

0

예, 개별 레코드가이 배치의 일부로 처리되었는지 여부를 알려주는 데이터베이스 레코드에 상태를 추가하여 솔루션의 신뢰성을 크게 높일 수 있습니다. 이 방법을 사용하면 한 번씩 함수를 호출하는 프로세스를 설정할 수 있으며 각 호출마다 X 개의 메시지 만 전송합니다. 따라서 호스트가 시간당 보낼 수있는 이메일 수를 조절하면 각 통화마다 얼마나 많은 사람들이 전송되고 얼마나 자주 사용자의 기능을 실행 하는지를 조정하여 쉽게 제어 할 수있게됩니다.

일반적으로 SMTP 메시지를 보내는 것이 로컬 데이터베이스를 업데이트하는 것보다 속도가 느리기 때문에 처리하는 동안 모든 레코드를 업데이트하는 속도가 걱정되지 않아도됩니다. 데이터베이스가 차이가 나는 곳에서 느린 경우 실행중인 시스템이 새 빠른 머신에 리소스가 부족한 경우 (즉, 더 많은 RAM이 필요함) 시간이 오래 걸립니다.

+0

오른쪽 ... 음, 그 경우 ... 여기 간다! –