72 messaggi dal 29 novembre 2005
Salve,
ho un servizio sul quale ho due metodi che vado a gestire in modo asincrono tramite un addhandler:

AddHandler s1.CheckStatoCompleted, AddressOf Async_Stato
s1.CheckStatoAsync(Prog)
AddHandler s1.CheckTicketCompleted, AddressOf Async_Ticket
s1.CheckTicketAsync(Prog)

Tutto funziona bene ma solo se definisco un solo addhandler, con entrambi gli addhandler definiti il servizio smette di funzionare. Una volta creati gli addhandler ho provato a chiamare un metodo sincrono e verificare il traffico di rete tramite il networkmonitor sembra non uscire niente dal client verso il webservice.
Anche provando a definire due istanze del servizio una per ciascun addhandler le conseguenze sono le solite.
Non è forse che è possibile definire un solo addhandler per servizio?
Come posso risolvere?
Grazie!
Mi sembra alquanto improbabile che intercettare un evento possa influire sulla chiamate al servizio, anche solo nell'invio, perché se guardi il proxy generato (fai un goto definition di CheckStatoCompleted) sono dei nomarli handler definiti sulla classe e non vengono usati fino a quando non avviene il callback della risposta al servizio.
Prova a mettere un breakpoint sul callback per vedere se almeno lì arriva (dovrai togliere l'attributo DebugTrought** che impedisce di farne il debug). Magari intercetta anche tutte le eccezioni di Visual Studio (menu Debug->Exceptions) così da vedere se scatta per caso un errore che non intercetti (potrebbe stare su un thread diverso)

Ciao

Il mio blog
Homepage
72 messaggi dal 29 novembre 2005
Grazie Ricciolo ma purtroppo non riesco a intercettare nessuna eccezione!
E cosa ancora più strana se definisco un solo addhandler funziona tutto bene fino a quando non chiudo il form e lo riapro, il servizio cessa di funzionare e nemmeno le chiamate sincrone riescono più a raggiungere il servizio che va in timeout. Nel form in questione definisco l'addhandler nel new e il removehandler nel dispose. Il servizio sembra proprio non riuscire a lavorare dopo il secondo addhandler definito su di esso!
Ho provato anche a creare una nuova istanza del servizio nella parte dichiarativa del form in questione lasciando le chiamate sincrone su un istanza del servizio a livello globale utilizzata dall'intero progetto, ma niente da fare, alla seconda definizione dell'addhandler sull'istanza del servizio creata dal form cessa di funzionare anche l'istanza del servizio a livello di progetto!!!

Modificato da scippy il 16 giugno 2009 11.06 -
Non è che è un problema di mantenimento in vita della classe? Hai provato una semplice console application che chiama in sincrono?

Ciao

Il mio blog
Homepage
72 messaggi dal 29 novembre 2005
Mantenimento in vita di quale classe? e se fosse così perchè il problema si presenta anche alla prima chiamata nel caso in cui gli addhandler che definisco nella classe sono più di uno?
Ho provato anche (come mi hai suggerito) una semplice console application che chiama ogni secondo un metodo sincrono sul solito servizio e non si blocca quando eseguo il progetto con gli addhandler e si verifica il problema. E' chiaro che il problema è nel client e che quando eseguo il secondo addhandler sul servizio qualcosa non va. Controllando il traffico di rete non vedo uscire nessuna richiesta dal client verso il servizio dopo il secondo addhandler!Perdo ogni collegamento con il servizio e l'unica eccezione generata è il timeout su qualunque chiamata faccia al servizio anche se creo una nuova istanza dello stesso!
Grazie!
72 messaggi dal 29 novembre 2005
Ho provato a portare tutti i servizi in modalità asincrona e creato un bottone con la chiamata asincrona a due metodi dello stesso servizio, premendo sul bottone accade quanto segue:
1) chiamo il metodo1 in asincrono sul servizio, questo metodo mi deve rendere una risposta dopo 30 secondi di attesa
2) subito dopo la chiamata del metodo1 senza attendere la sua risposta chiamo il metodo2 sempre in asincrono sulla solita istanza del servizio, tale metodo deve rendere una risposta immediata
3) purtroppo non ricevo risposta al metodo2 fino a quando non ho ricevuto risposta alla prima chiamata, quindi la risposta al metodo2 attende anche lui 30 secondi prima di tornare anche se il metodo non dovrebbe avere ritardo sulla risposta

Mi sono chiesto se il problema fosse sul client o sul server ed ho provato a monitorare il traffico di rete verificando quanto segue:
la prima chiamata esce dal client ma la seconda chiamata non esce fino a quando non torna la risposta alla prima chiamata. Sembra proprio che la gestione asincrona sia a livello di applicazione ma che il servizio venga gestito dall'applicazione in modalità sincrona anche con chiamate asincrone. Quindi è sbagliato dire come avevo detto nel precedente post che il servizio cessa di funzionare, il servizio funziona! ma rimane bloccato dalle chiamate anche se asincrone fin quando non riceve risposta con una gestione sequenziale delle chiamate!!!

Credo che questo comportamento è passato inosservato ai più in quanto le chiamate asincrone non vengono usate quasi mai con tempi di risposta lunghi come anche alcuni minuti. Credo quindi che l'uso degli addhandler per chiamate asincrone con risposte di molti secondi o anche minuti non sia una soluzione percorribile.
Ma allora quale strada seguire per rispondere a tale necessità?
Modificato da scippy il 18 giugno 2009 11.42 -

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.
In primo piano

I più letti di oggi

Media
In evidenza
MISC