C# で記述されたクライアント アプリケーションを使用して、企業の交換サーバーに一括メールを送信しています。
クライアント アプリケーション (サーバーではなく) がタイムアウトになることがあり、実際に発生しました。サーバーがリクエストを完了したかどうかを知る方法がないため、この場合の再試行をどのように処理しますか?
重複を避けるために使用できる関連する ID はありません。長いタイムアウトや無限のタイムアウトを設定することは、適切なポリシーではありません。
再試行に指数バックオフ アルゴリズムを使用しています。この場合、次回はより長く待機するため、複製を 1 つだけ送信する必要があります。
弾丸教授の解決策はないと思います。とにかく、これはこの種の最初のプロジェクトなので、見逃す解決策を誰かが持っているかどうかを確認する必要があります。
更新: 取引所が中継を行っています。SmtpClient を使用して電子メールを送信しています。問題は、サーバーが 250 Ok メッセージを送信できるが、受信者がそれを受信せず、再試行することです。それが、この投稿で解決しようとしている唯一の問題です。
Rest サービスでは、同時実行エラーを使用することをお勧めします。クライアントが何かを投稿して「409 - conflict」ステータスを取得した場合、それはメッセージがサーバーに既に保存されていることを意味します。しかし、それが起こるためには、クライアントによって作成され、メッセージの一部であるメッセージのキーとなります。SMTP には、それを防ぐメカニズムがないようです。