2009-05-13 1 views
2

"가끔"문제를 디버그하려고합니다. 이메일을 보내야하는 고전적인 ASP 응용 프로그램이 있습니다. 어떤 이유로 든 COM을 통해 노출 된 C# 개체를 사용하여이 작업을 수행합니다. C# 개체는 SendAsync를 사용하여 Send를 수행하는 MailMessage 및 SMTPClient 주위의 간단한 래퍼입니다. ASP 쪽에서 개체는 각 메일을 보내기 전에 Server.CreateObject()를 사용하지만 메일 메시지는 엄격한 루프로 보내집니다. 이 각 메시지에 대한 새 COM 개체 및 따라서 새 C# 개체가 있어야합니다. 그러나 우리는 메시지가 떨어지는 것을보고 있으며 메시지가 여러 수신자에게 객체가 재사용되고있는 것처럼 보냅니다.ASP, Server.CreateObject, MTS 및 C# 개체 풀링 - 재사용 문제가 있습니까?

MTS에 대한 조사가 끝나면 (다시는 내가 가지 않을 것이라고 생각한 적이 없어!) 기억났습니다. Server.CreateObject가 MTS를 통과하고 MTS가 COM 개체를 풀어 "도움"한다고 발견했습니다. 우리는 MTS를 사용하지 않았다고 생각한 새로운 ActiveXObject 대신 ASP 코드를 변경했습니다. 그러나 동일한 문제가 있습니다.

.net의 ServicedComponent 인터페이스가 ObjectControl 인터페이스의 .net/com + 버전이라고 가정하여 올바르게 입력 했습니까? ServicedComponent에서 상속 받으면 객체는 pooling = false를 허용하도록 설정됩니까? 차라리 ASP에서 변경을하고 싶지만 가능하지 않다면 C#을 변경할 수도 있습니다.

생각하십니까?

편집 : 페이지 언어도 "일반"VBScript가 아닌 JScript입니다.

답변

1

Server.CreateObject와 새 ActiveXObject는이 경우 모두 똑같습니다.

COM +는 풀링 될 수 있음을 명확하게 나타내지 않는 개체를 풀링하지 않습니다.

여기에 .NET 구성 요소를 사용하는 이유가 무엇인지 조사하고 싶습니다. 왜 CDO.Message가 사용되지 않고 있습니까? SendAsync를 사용하면 특히 혼란 스럽습니다. 전자 메일을 보내고있는 빡빡한 루프가 있다면 SendAsync는 당신에게 거의 도움이되지 않습니다.

나는이 경우에 CDO.Message를 사용하는 것을 피하는 좋은 이유를 생각할 수 없지만 다른 요소가 누락되어있을 수 있습니다.

+0

대부분의 답변은 "왜 우리가이 코드를 상속했기 때문에":-) 불행히도 클라이언트는 문제를 "고치고"다음 부분을 다시 쓰는 것을 선호합니다. 코드. 이봐 요 ... 그것은 그들의 십센트입니다. .NET 개체가 ServicedComponent에서 상속되지 않으므로 COM +에서이를 풀링하지 않습니까? CanPool의 기본 구현은 false이지만 .net 객체가 상속하지 않으면 기본값이 없습니다. 우리는 회 돌이로 이메일을 보내지 만 각각의 이메일은 자체 COM 객체를 가지므로 자체 SMTPClient를 가져 오므로 비동기는 괜찮습니다. COM 개체를 다시 사용하지 않는 한. –