Продолжение обсуждения началось в другое сообщение : я использовал службу Windows для размещения отправителя WCF-почты. Сам сервис довольно прост: он использует DataContract для получения основных свойств класса System.Net.Mail.MailMessage
(поддерживает вложение - см. Упомянутый пост, код от edosoft) и класс System.Net.Mail.SmtpClient
для фактической отправки электронной почты. Используемая платформа .NET была 3.5SP1 (с VS2008).
Обратите внимание, что у меня уже был код, работающий внутри сборки; упражнение состояло в том, чтобы просто раскрыть функциональность с помощью службы WCF. Я использовал basicHttpBinding
для привязки конечной точки, никаких дополнительных настроек.
Когда я тестировал сервис в своей среде рабочего стола (Windows XP), я заметил следующее:
Письма отправлялись только в том случае, если я перезапустил службу Windows в первые 10-15 секунд после вызова службы WCF, иначе ничего бы не произошло;
Никаких исключений / сообщений об ошибках в файлах трассировки / журнала обслуживания;
Нет сообщений об исключениях / ошибках при вызове метода SmtpClient.Send(MailMessage msg)
или где-либо еще при запуске сервисного кода.
Некоторое время я играл с разными привязками и конфигурациями, даже пытался отправить сообщение из другой ветки - без изменений. Я действительно столкнулся с вопросом на форуме, связанным с этой проблемой: тот же метод, который вызывается из веб-службы ASMX, будет работать только при выполнении IISRESET. Мне удалось воспроизвести эту проблему, создав веб-сервис ASMX с использованием того же кода отправки, который использовался в WCF. Размещение службы WCF под IIS также не помогло (та же проблема).
Тогда я решил развернуть службу в среде Windows 2008 (служба Windows размещена) - видите, никаких изменений в исходном простом коде нет. Та же конфигурация, все то же самое. Это сработало сразу, без задержек или любой другой проблемы, которую я мог определить. У кого-нибудь есть идеи по этому поводу? Сейчас я попробую это в среде Windows 2003, но я хотел бы знать, является ли это на самом деле известной ошибкой / ограничением, или это как-то связано с ошибкой ASMX (как это выглядит). Кто-нибудь видел это раньше?
Спасибо