2014-01-07 1 views
1

Мы сталкиваемся с проблемой в нашей реализации smtp, которую мы, похоже, не можем решить.SMTP Ответы на закрытие не закрывают подключения к службе IIS

Чтобы сделать вещи, это наша текущая настройка:

Сервер имеет .NET Service работает, обработка очереди сообщений электронной почты из нашего приложения (сгенерированные отчеты, которые будут рассылают клиентам) Это делается используя .NET SMTPClient, используя блок для вызова утилиты smtpclient (.NET 4.0), заставляя отправлять команду QUIT.

Сообщение затем отправляется на сервер B, где работает IIS6, и обрабатывает SMTP-соединения, отправив сообщение в почтовый ящик клиента.

Теперь проблема (видно из журналов): на сервере для клиента на службе .NET на сервере A отправит QUIT на сервер B. Сервер B затем отправит команду QUIT на почтовый хост клиента , и его почтовые хосты, похоже, отвечают 221, закрывая соединение. Но тогда сервер B никогда не выступает на сервер A, поэтому соединение между сервисом .NET и SMTP-сервером IIS остается открытым, пока не закончится доступное соединение, блокируя все новые сообщения электронной почты. (Есть около 64к открытых соединений к тому времени)

Схематические, это так:

.NET Service SMTP (SERVER A) --MSG -> IIS 6 SMTP-сервер (сервер B) --MSG- -> КЛИЕНТ

.NET служба SMTP (сервер А) --quit -> IIS 6 (сервер B) --quit -> КЛИЕНТ

.NET служба SMPT (сервер А) <-X - IIS 6 (SERVER B) < - 221 (соединение закрыто) - КЛИЕНТ

Любой может указать на o Ур проблема/знает, как решить эту проблему? Мне не удалось найти подобную проблему в Интернете ...

Спасибо большое!

Update

За что стоит: Я попытался с помощью ServicePoint.ConnectionLeaseTimeout сейчас и установить его на определенный тайм-аут, вместо того, чтобы позволить его открытым для бесконечного времени. Возможно, это не самое чистое решение, но если он закрывает все открытые соединения между серверами, а не блокирует новые соединения, когда многие остаются открытыми, наша первоначальная проблема решается хотя бы ... Но сначала нам нужно провести некоторые испытания прежде чем это можно будет гарантировать.

ответ

1

В соответствии с this произошла ошибка в каркасе 2.0, при которой SMTPClient не располагал и не отправлял QUIT, зафиксированный в v4. Возможно, в реализации все еще есть ошибка. (У меня нет сервер SMTP доступен для тестирования, я боюсь. Может быть стоит отправить это как ошибку на веб-сайте MS.

(ссылка нашла прибегая к помощи «SmtpClient не отпуская гнезда»)

Cheers -

+0

Привет, спасибо за ваш ответ. Я также прочитал об этой ошибке QUIT, но при поиске в журнале QUIT эффективно отправляется, просто ответ кажется потерянным между двумя серверами. Как вы предлагаете, я постараюсь опубликовать это в баг-файле MS и посмотреть, могут ли они пролить свет на эту проблему ... – user3168628

+0

Если вы работаете в компании и имеете лицензионное соглашение по объему, у вас может быть менеджер по учетным записям MS, назначенный вашей компании, задача которой - помочь с чем-то. Кроме того, если у вас есть подписка на MSDN, у вас будет множество бесплатных вызовов поддержки с помощью MS. Мой опыт использования этих средств заключается в том, что они могут быть действительно полезны, когда все остальное терпит неудачу. –

Смежные вопросы