24 messaggi dal 01 febbraio 2017
Salve, ho un problema su cui mi sto arrovallando da un pò di tempo.
COROLLARIO
Ho effettuato al trasformazione di un vecchio servizio funzionante con Web service (WS.ASMX) in WCF, e con pochissime modifiche al codice, ha funzionato tutto perfettamente.

Il servizio è consumato da un'applicazione (Win form) .

A questo punto ho aumentato il livello di sicurezza, implemetanto WsHttpBinding, invece del vecchio (ed interoperabile) BasicHttpBinding.

e qui è sorto il problema.

PROBLEMA

L'applicazione client funziona bene anche nella nuova versione, ma saltuarialmente si blocca.
Dopo diverse prove ho individuato il problema. L'applicazione usa una funzione di scorrimento su un archivio (record precedente/record successivo), e ad ogni lettura effettua una serie di chiamate al servizio per la decodifica di altri campi.
Bene, anzi male, dopo un certo numero di click su PRECEDENTE (ma anche SUCCESSIVO) l'applicazione client si blocca per un tempo indefinito.

Cambiando solamente il binding, e rimettendo (ovviamnete sia sul client che sul servizio) BasicHttpBinding, il tutto torna a funziare senza blocchi. Mentre invece inserendo WSHttpBinding riprende il blocco, quindi senza toccare il codcie, ma solo il WEB.CONFIG E APP.CONFIG.

PROVE
Ho provato col debug a capire quale fosse l'istruzione del servizio che la bloccasse, poichè risultava che il client era in attesa di risposta da parte del servizio. Ma l'IDE mi segnala che il servizio è fermo su una istruzione in attesa del CLR, ovvero il blocco è nell'ambiente runtime.

Uno sniffer del traffico, mi fa vedere la richiesta del client con la sua intestazione, ma risulta che non arriva nessuna risposta. La CPU d'altronde non è alluppata .... il pc risponde normalmente ...

Idee ? Consigli ?

Come posso indagare più approfonditamente su tale problema ? Come posso capire perchè il CLR si pianta senza nessun messaggio ?

L'unica cosa che capisco è che con wsHttp entra in gioco la codifica dei dati, a tal fine, ho provveduto a disattivare la mia codifica personalizzata che avevo inserito nel vecchio servizio WS.ASMX, pensando magari che la doppia criptazione andasse in conflitto, ma nulla è cambiato; si pianta miseramente, senza nessun messaggio.

Idee, consigli ?

Grazie.
Gino.
10.286 messaggi dal 09 febbraio 2002
Contributi
Ciao Gino, non so con sicurezza quale possa essere la causa. Dato che la CPU non è al 100%, potrebbe trattarsi di un deadlock a livello del db. Oppure, se stai usando operazioni asincrone, magari devi aggiungere un .ConfigureAwait(false) come spiegato qui:
https://medium.com/bynder-tech/c-why-you-should-use-configureawait-false-in-your-library-code-d7837dce3d7f

Inoltre, hai provato a vedere se il problema ti si verifica anche con operazioni molto semplici, tipo che restituiscono una banale stringa (senza accedere al db o altro). In caso scriviti quest'operazione e fai delle prove, così cominciamo ad escludere qualche causa.

ciao,
Moreno
Modificato da BrightSoul il 27 novembre 2017 13.11 -

Enjoy learning and just keep making
24 messaggi dal 01 febbraio 2017
Ciao Moreno, speravo in tuo intervento.

Si il servizio usa operazioni asincrone, nel senso che ho spuntato la casella "genera operazioni asincrone" nel riferimento al servizio (nel Client). Ma poi mi limito ad usare la sua versione customizzata dalla classe proxy che ha generato VS.
Quindi il metodo "Leggi_successivo" diventa "Leggi_successivoAsync" e nel codice non uso il costrutto ASYNC/AWAIT.
Il risultato viene poi accolto nell'evento "Leggi_successivoComplete", svincolamdomi dalla relativa gestione dei delegati.

Quindi anche volendo dove dovrei settare un .ConfigureAwait(false) ?
Forse è usato nella classe proxy generata dal compilatore ?

Come dicevo tutto funziona bene, anche con WCF ed anche con accessi multipli sul db, e questo è vero fin quando uso il BasicHttpBindig.

Si "rompono i telefoni", appena uso wsHttpBinding. Quindi se fosse un problema di accesso concorrenziale al DB che blocca qualcosa, lo dovrebbe fare anche con basicHttpBinding ?

C'è qualche modo/strumento che mi possa aiutare a capire dove è bloccato l'ambiente runtime ? Ho visto che VS 2015, mette a disposizione molti strumenti di indagine.

Grazie.
Gino.
24 messaggi dal 01 febbraio 2017
Aggiungo che da altre prove fatte, vedo IIS bloccato, nel senso che appena tento di riavviarlo anche solo arretsarlo (quando succede il problema), non risponde per un bel pò di tempo.

Cosa potrebbe essere ?

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.