WCF + SmtpClient: работает только в среде Windows 2008 - PullRequest
2 голосов
/ 15 октября 2010

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

Спасибо

...