Время ожидания страницы отправляется, даже если письма отправлены

2

Эта проблема оставила меня в тупике. Возможно, этот вопрос нужно будет перенести на Server Fault, но есть компонент программирования, поэтому я решил, что я начну. Кроме того, наша команда по инфраструктуре страстно полагает, что все в порядке с их конца, но это не всегда означает ничего.

В любом случае, у меня есть простое действие GET-POST-Redirect, которое отправляет два отдельных письма с помощью пакета Postal nuget, прежде чем перенаправить на страницу успеха - довольно простой материал. Действие isync, и я использую await email.SendAsync() из Postal API.

Когда форма отправляется, первое электронное письмо приходит в мой почтовый ящик мгновенно, но код находится в этой строке await email.SendAsync() в течение 15-20 секунд, прежде чем он перейдет к следующей строке (подтвержденной в отладчике). Затем он отправляет второе электронное письмо, которое снова входит в мой почтовый ящик мгновенно, и снова код зависает на этой строке, независимо от успешной отправки, в течение 15-20 секунд, прежде чем перейти к строке с перенаправлением. В процессе производства эта задержка после отправки электронной почты, объединенная для двух писем, вызывает подключение к reset, прежде чем можно отправить ответ на перенаправление. Конечно, я мог бы просто перетащить страницу, но на самом деле это не устраняет проблему, так как пользователь все-таки заканчивает минутную задержку, прежде чем получить ответ.

Я также попытался отправить электронные письма синхронно только с email.Send(), но происходит такое же поведение. Я просмотрел источник для Postal, и хотя для отправки асинхронной электронной почты некоторые пользовательские оболочки вокруг SMTPClient отправляются по электронной почте, там практически ничего, кроме стандартной старой отправки электронной почты С# с синхронным методом Send.

Он также не связан с сервером, на котором работает сайт, поскольку я могу видеть одно и то же поведение как в производстве, так и при отладке локально (хотя и для соединения с тем же сервером Exchange).

Он действует так же, как и ожидает, что сервер Exchange отправит какой-то "готовый" ответ, но из того, что я знаю о SMTP, он не работает так. Он должен просто отправить письмо на SMTP-сервер и продолжить весело, полагая, что SMTP-сервер действительно сделает то, что он должен делать.

Любые идеи были бы очень благодарны, потому что я даже не уверен, как продолжить отладку этого на данный момент. Что еще я мог проверить или попробовать?

UPDATE

Благодаря предложению @MichaelEvanchik, чтобы опробовать Wireshark, я смог ясно видеть, что на самом деле 30-секундная задержка, вызванная сервером Exchange. Он получает последний бит отправляемого сообщения, а затем через 30 секунд, наконец, отвечает клиенту "Успешно поставил в очередь для доставки". На этом этапе клиент, наконец, ВЫЙДЕТ, и код возобновится. Итак, я возвращаю его обратно в инфраструктуру.

ОБНОВЛЕНИЕ # 2

Таким образом, по-видимому, на разъеме была установлена ​​30-секундная задержка, позволяющая подтвердить, что письмо действительно отправлено, а не просто поставлено в очередь для доставки. Лично я считаю, что в какой-то степени побеждает точка "поставлена ​​в очередь для доставки", но, несмотря на это, мне не нужно подтверждение, что она действительно была отправлена, только что она была получена сервером Exchange, поэтому инфраструктура удаляется задержка.

Теги:
asp.net-mvc
email
exchange-server
postal

1 ответ

0
Лучший ответ

Wireshark может пролить некоторые подсказки. =]

Вот как продолжить отладку и покажет вам все, что происходит с http-сервера на SMTP.

  • 0
    Я не отрицал вас, но если бы мне пришлось угадывать, почему кто-то другой сделал это, то ваш первоначальный ответ был бы довольно кратким. Даже ваш отредактированный ответ не очень полезен. Я достаточно компетентен, чтобы найти Wireshark и выяснить, как использовать его самостоятельно, но другие, которые могли бы написать этот вопрос, и другие, которые могут рассмотреть это в будущем, могут не быть. Хороший ответ предоставит гораздо больше подробностей и, возможно, базового использования. Пища для размышлений, прежде чем злиться на людей за то, что они обижают тебя.
  • 0
    кажется, что вы написали так, что вы так много сделали и сделали правильные вещи, я считаю это лучшим решением, затем я просто попрошу файлы дампов Wireshark
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню