WCF + SmtpClient: работает только в среде Windows 2008.

Продолжая обсуждение, начатое в другом сообщении: я использовал службу 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 (как кажется). Кто-нибудь видел это раньше?

Спасибо,


person casals    schedule 15.10.2010    source источник