Try..catch...

giovedì 23 aprile 2009 - 13.04

augusto890 Profilo | Junior Member

Ciao ragazzi...avrei un piccolo problema...ho implementato un sito che permette l'invio di newletter a pacchi di migliaia di mail...
ho solo un problema...dopo un po che invia...l'smtp mi rifiuta l'invio...e mi manda il processo in errore! ovviamente l'invio e nel blocco try...e tutto è compreso in un ciclo for...volevo sapere...dopo che entra nel catch...c'è possibilità di fare continuare il ciclo senza che venga chiuso il processo? e quindi bloccato l'invio delle mail?

Grazie, Luca

rossimarko Profilo | Guru

Ciao,


se hai un ciclo for metti un try catch all'interno del ciclo

for (int i = 0; i < 100; i++) { try { } catch(e) { } }

se anche viene generato un errore all'interno del ciclo prosegue con l'iterazione seguente
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

samar Profilo | Senior Member

Scusa rossimarko,
leggendo la tua soluzione stavo pensando se non sarebbe il caso di mettere un exit for nel finally,che dici?

augusto890 Profilo | Junior Member

eh no...anche io la pensavo cosi...ma dopo svariati test...ti assicuro che se genera l'errore...lo fa bloccare!

rossimarko Profilo | Guru

>eh no...anche io la pensavo cosi...ma dopo svariati test...ti
>assicuro che se genera l'errore...lo fa bloccare!

Puoi inviarci il codice attuale così capiamo?

Quando si blocca lo esegui in debug? Perchè se lo esegui in debug è normale che si fermi...
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

augusto890 Profilo | Junior Member

nono...nn in debug! ma lanciandolo normalmente...fai conto che e un thread! forse è per quello...ti giro il codice...

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

samar Profilo | Senior Member

Ho visto che usi fastweb come smtp, non è che il loro server interpreta il tuo invio massiccio come un attacco, impedendo dopo un pò ulteriori invii?

Nel senso che l'errore potrebbe essere generato "volontariamente" e non da un 'eccezione della tua apllicazione

augusto890 Profilo | Junior Member

no...siamo un'azienda...non la invio da casa mia...abbiamo un piano personalizzato...non dovrebbe dare problemi...comunque è l'smtp che ci blocca dopo un po di invii...quello sicuro...e per quello che volevo bypassare la catch in modo che non si fermasse..

samar Profilo | Senior Member

Mandare le mail a blocchi? rallenta un pò l'invio generale ma magari risolve...

augusto890 Profilo | Junior Member

infatti ora facciamo cosi!...mandiamo blocchi da 500...ma quando devi mandarne 3000...4000...diventa scomodo..quindi non c'è modo per bypassare?

rossimarko Profilo | Guru

Il fatto che sia un thread a parte potrebbe effettivamente causare problemi. Hai fatto una prova senza thread tanto da capire se il problema è effettivamente quello?

Il tuo software è una windows application? In questo caso si potrebbe pensare all'utilizzo di un backgroundworker che ti consentirebbe di gestire anche l'interfaccia
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

augusto890 Profilo | Junior Member

è un sito...scritto in vb.net...non un window application...perchè internamente abbiamo dei problemi a intercettare l'smtp! io ho letto l'istruzione Throw...potrebbe servire? non so che faccia pero...senno mi e pèassato per la testa un goto...però non è la soluzione migliore! però amari estremi...amari estremi:D

augusto890 Profilo | Junior Member

ora ho provato a implmentare il goto...però gli faccio fare al max 10 errori...cosi evitiamo un loop infinito! sperem in bene!!!

rossimarko Profilo | Guru

>è un sito...scritto in vb.net...non un window application...perchè
>internamente abbiamo dei problemi a intercettare l'smtp! io ho
>letto l'istruzione Throw...potrebbe servire? non so che faccia
>pero...senno mi e pèassato per la testa un goto...però non è
>la soluzione migliore! però amari estremi...amari estremi:D

No throw genera un'eccezzione (es: throw new applicationexception ("Errore di prova"))

Se lanci il tutto da una pagina web allora c'è anche un problema di gestione del thread. Di solito queste cose si schedulano batch, ovvero il sito si salva da qualche parte (esempio su db) che deve fare l'invio e poi c'è un servizio windows che si prende in carico le operazioni da fare e fa l'invio vero e proprio.

Hai provato a togliere il thread?
Quando ti viene notificato un errore qual'è il messaggio? Di solito l'smtp ti dice perchè ha rifiutato l'invio..
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

augusto890 Profilo | Junior Member

ho fatto un test...pure col goto il thread viene chiuso...questa è l'unica soluzione che posso fare...per forza col thread...come posso fare sec voi?

rossimarko Profilo | Guru

>ho fatto un test...pure col goto il thread viene chiuso...questa
>è l'unica soluzione che posso fare...per forza col thread...come
>posso fare sec voi?

Scusa, ma non riesci a fare un attimo un test senza thread?

Ti giro anche un doc in cui si parla di thread e asp.net: http://msdn.microsoft.com/en-us/magazine/cc164128.aspx
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

augusto890 Profilo | Junior Member

quando l'ho implementato lo usavo senza trhead...la pagina rimaneva in carica...per ore e ore..ma anche li dava problemi...
ora butto un okkio a msdn....grazie!

augusto890 Profilo | Junior Member

se provo a mettere uun try dentro un try...sorpasso il problema?

augusto890 Profilo | Junior Member

il continue nel finally??? forse quella è la soluzione?"?"

rossimarko Profilo | Guru

>quando l'ho implementato lo usavo senza trhead...la pagina rimaneva
>in carica...per ore e ore..ma anche li dava problemi...

E' per quello che bisognerebbe far elaborare l'operazione ad un servizio slegato dal web.

Anche lanciare l'esecuzione in multithread ti fa perdere il controllo della cosa (non sai cosa stia effettivamente succedendo e il thread potrebbe morire da un momento all'altro) e oltretutto devi considerare che, come riportato nel doc, IIS non ha un numero illimitato di thread, vanno usati con cautela.
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

augusto890 Profilo | Junior Member

sono consapevole di tutte queste cose...ma l'unica cosa che potevamo implementare era questa...non posso farci niente con questa...ora ho messo continue ovunque...vediamo come va:D

rossimarko Profilo | Guru

Allora se non hai altri metodi prova a valutare un invio a blocchi pilotato da javascript.

Un piccolo esempio: prepari un webservice che invia N mail (dove N è un numero che dovrai tarare in base al funzionamento).

Poi nella pagina aspx chiami il webservice da un javascript mettendo magari qualche barra di scorrimento che serve all'utente per capire lo stato delle cose
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

augusto890 Profilo | Junior Member

al momento ho provato con i continue for...e due try uno dentro l'altro! ora sembra stia andando! ne ha inviate 1000 senza presentare problemi!

augusto890 Profilo | Junior Member

Ieri ho lanciato un invio di 2000 mail...tutte senza problemi!...ora sto ritestando...sto giro sono 3000...vediamo come si comporta...sembra che i continue funzionano!
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5