Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

SmtpClient Ο ίδιος κώδικας κάνει throw διαφορετικό exception?

Îåêßíçóå áðü ôï ìÝëïò micfarmakis. Τελευταία δημοσίευση από το μέλος Παναγιώτης Καναβός στις 05-02-2013, 20:19. Υπάρχουν 3 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  05-02-2013, 17:27 72059

    SmtpClient Ο ίδιος κώδικας κάνει throw διαφορετικό exception?

    Έχω το παρακάτω απλό console application 

    private static void Main(string[] args)
            {
                MailMessage message = new MailMessage { From = new MailAddress("[email protected]") };
                message.Body = "Test!";
                message.To.Add(new MailAddress("[email protected]"));
                using (SmtpClient smtp = new SmtpClient())
                {
                    
    smtp.Host = "mail.adactus64.co.uk";
                    smtp.Port = 25;
                    smtp.Timeout = 10; --in purpose to test wcf service binding timeout later
                   
                    try
                    {
                        smtp.Send(message);
                    }
                    catch (SmtpException ex)
                    {
                        Console.WriteLine(ex);
                    }
                    Console.ReadLine();
                }
            }


    Αυτό που μου κινεί το ενδιαφέρον είναι ότι ο παραπάνω κώδικας μου κάνει raise SmtpException άλλοτε Τhe operation has timed out είτε Τhe remote server could not be resolved που ήταν και αυτό που ανέμενα. Υπάρχει κάποια εξήγηση για αυτό? (η ίδια συμπεριφορά είτε ορίσω είτε όχι το Timeout property).
    Aφορμή για τα παραπάνω στάθηκε το γεγονός ότι στο log file εφαρμογής είχα σποραδικά εγγραφές τύπου Operation time out και με to stack trace να δείχνει στη stmp.Send μολονότι τα settings ήταν σωστά καθότι η ευρεία πλειοψηφία των emails στέλνονταν κανονικά. 
  •  05-02-2013, 17:33 72060 σε απάντηση της 72059

    Απ: SmtpClient Ο ίδιος κώδικας κάνει throw διαφορετικό exception?

    Αν ο remote smtp server είναι "φορτωμένος" ή αντιμετωπίζει προβλήματα, είναι πιθανό να έχεις σποραδικά timeout μηνύματα - δεν φαίνεται να υπάρχει κάτι παράλογο σε αυτό. Μήπως όμως ρωτάς κάτι διαφορετικό και δεν το έχω καταλάβει σωστά;


    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  05-02-2013, 17:52 72061 σε απάντηση της 72060

    Απ: SmtpClient Ο ίδιος κώδικας κάνει throw διαφορετικό exception?

    Το task μου είναι το πώς θα μειωθούν ή εξαλειφθούν τα παραπάνω timeouts και κοιτάζω για concurrent users, πιθανότητα ISP throttle για spamming. Έχοντας δεδομένο ότι ο κώδικας δεν παρουσιάζει προβλήμα όταν κάνω απευθείας κλήση μέσω dll παρά μόνο μέσω κλήσης WCF service αποφάσισα να προσομοίωσω το περιβάλλον μήπως υπήρχε θεμα με το binding timeout.  Ξεκίνησα από το πλέον απλό σενάριο με το console application που περιγράφω. Ο smtp host server δεν υπάρχει και περίμενα exception Server can not be resolved/touched etc etc αλλά αντί αυτού είχα 2 διαφορετικα exception messages (κατά βάση το αναμενόμενο κατ' εμέ) και αυτό μου προκαλεί απορίες. Κοιτάζοντας το MSDN τώρα βλέπω 
    SmtpClient.Send Method (MailMessage)
    SmtpException The connection to the SMTP server failed.-or-Authentication failed.-or-The operation timed out. .
  •  05-02-2013, 20:19 72063 σε απάντηση της 72061

    Απ: SmtpClient Ο ίδιος κώδικας κάνει throw διαφορετικό exception?

    Βρε βρε βρε καλώς τον Εγγλέζο! Πως πάνε τα τσάγια?

    Το timeout που έχεις βάλει είναι πολύ μικρό και είναι αν θυμάμαι ίσο με το timeout του DNS. Μπορεί πολύ απλά ο SmtpClient να προλαβαίνει να κάνει timeout πριν γυρίσει error από το DNS. Πάω στοίχημα ότι αν το αυξήσεις, θα παίρνεις μόνο exceptions για DNS.



    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems