Testare risposta di un web service in winform????

lunedì 07 novembre 2005 - 15.47

andreapavia Profilo | Senior Member

in un progetto winform istallato su piu' client con database centralizzato e interrogato tramite web services mi succede questo

utentiF è IL MIO WEB SERVICE DI LOGIN E QUESTO E' IL CODICE

dim utentiF as new web_utenti.utenti

Try
utentiF.Credentials = System.Net.CredentialCache.DefaultCredentials
controllo_check = utentiF.check(connessioneStr, stringaLogin.Trim, stringaPWD.Trim)
Catch ex As Exception
controllo_check = -2
End Try

If controllo_check = -2 Then
MessageBox.Show("ASSENZA DI COLLEGAMENTO AL WEB SERVICE", "ERRORE", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1, MessageBoxOptions.DefaultDesktopOnly)
Else
' fa tutto quello che deve fare
end if

********** PROBLEMA
se il server dove si trova il webservice non è raggiungibile catturo l'eccezione, mostro il messaggio di errore e tutto è ok, non c'è rete o il server è giu', il dabase è bloccato ecc ecc .....

il problema che si pone è il seguente...

lancio la login, stacco il cavo di rete (x simulare qualcosa che per la legge di murphy accadra' sicuramente) e non ho ancora ricevuto una risposta dal sever il winform si inchioda e il try e catch non fanno nulla (giustamente perchè testano se hanno ragiunto il webservice).....

come faccio ad intercettare questo tipo di eccezione????
come faccio a far capire al mio winform (perchè giustamente lui sta fermo su una riga di codice ad attendere una risposta da web serviece che non arrivara' mai) che non c'è rete, come catturo questa eccezione ??????


grazie 1000






Brainkiller Profilo | Guru

>come faccio ad intercettare questo tipo di eccezione????
>come faccio a far capire al mio winform (perchè giustamente
>lui sta fermo su una riga di codice ad attendere una risposta
>da web serviece che non arrivara' mai) che non c'è rete, come
> catturo questa eccezione ??????

Ciao,
non mi risulta che funzioni così. Nel momento che tu chiami un Web Service viene aperto un socket sulla porta remota 80 del server. Se in questo momento tu stacchi il cavo di rete il socket non è più collegato quindi per forza deve scatenare un eccezione.

Anche se non la dovesse scatenare, ci deve essere sicuramente un sistema di Timeout entro il quale la classe Proxy del Web Service deve ricevere i dati. Se non li riceve scatta il timeout e tu hai l'eccezione.

Hai già sperimentato il caso che hai sottoposto ?
Ciao

David De Giacomi
Microsoft MVP
http://blogs.dotnethell.it/david/

rimini Profilo | Newbie

Ciao, non ho la soluzione al tuo caso, ma posso dire che esiste un errore di time out, che scaturisce dal momento in cui tu stacchi la rete. Inserendo un msgbox try vedrai apparirti l'errore, diverso a seconda se il database è irraggiungibile (cavo rete staccato o server down) o se il db è occupato, sono errori diversi che se inseriti nel try non vengono visualizzati.
Ora recupero la linea con cui vedrai l'errore, intanto xò puoi fare la prova togliendo il try e leggendo l'errore che ti compare a video, da li saprai poi come comportarti.

andreapavia Profilo | Senior Member

dunque....
descrivo il mio test :

i web service sono sul mio client (il mio pc che uso per sviluppare, quello con visual studio per intenderci), non li ho ancora istallati sul server.... mentre il database è sul server

clicco su un bottone di login, appena clicco stacco il cavo di rete e "BOOM" il winform si impalla e nel Catch non ci entra (provato con punto di debug)


dim utentiF as new web_utenti.utenti

Try
utentiF.Credentials = System.Net.CredentialCache.DefaultCredentials
controllo_check = utentiF.check(connessioneStr, stringaLogin, stringaPWD)
Catch ex As Exception
controllo_check = -2
End Try

nel momento in cui mettero i web service sul server l'eccezione verra' catturata oppure mi si blocchera' ancora il programma?????


grazie 1000



Brainkiller Profilo | Guru

>clicco su un bottone di login, appena clicco stacco il cavo di
>rete e "BOOM" il winform si impalla e nel Catch non ci entra
>(provato con punto di debug)

Ripeto, non è necessario che ci entri subito magari il timeout è a 120 secondi quindi entrerà solo dopo 2 minuti. hai già fatto anche questa prova ?

Ciao

David De Giacomi
Microsoft MVP
http://blogs.dotnethell.it/david/

andreapavia Profilo | Senior Member

risolto il problema... avevo fatto una fesseria senza accorgermene..... le classi per connessione e esecuzione query, non erano nei web service perchè li avevo trasformati in classi vb normali..... ora mi pigla tranquillamente l'eccezione

grazie 1000

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