2012-02-02 15 views
6

Ho un'applicazione di Winforms scritta in C# che consuma servizi Web da un server Windows 2008 IIS Coldfusion. Tutte le categorie chiamate di servizio successo, ma uno, che non riesce circa il 50% del tempo con il seguente errore:Errore nel consumo del servizio web: una connessione esistente è stata chiusa forzatamente

System.InvalidOperationException è stata gestita dal codice utente Messaggio = C'è un errore nel documento XML (1254, 7).

con un'eccezione interna:

InnerException: System.IO.IOException Messaggio = Impossibile leggere dati dalla connessione di trasporto: Una connessione esistente interrotta forzatamente dall'host remoto.

Ho controllato i miei registri IIS e ho ricevuto un errore 503 (servizio non disponibile) e un codice IIS 64 (la rete specificata non è più disponibile). Qualsiasi suggerimento sarebbe molto apprezzato.

eseguo il mio servizio web in SOAP UI e ottengo il seguente errore:

javax.net.ssl.SSLException: connessione è stata chiusa: javax.net.ssl.SSLException: java.net.SocketException: Reset connessione

Questo codice funziona bene in un'azienda, ma questo errore si apre quasi ogni volta per questa azienda con cui sto attualmente lavorando.

+0

controllare i registri eventi di Windows, in particolare il registro applicazioni. A proposito, i servizi sono _critti_ in Coldfusion? –

+0

Non ci sono errori o altri elementi nei registri eventi relativi a questo problema. I servizi sono scritti in Coldfusion. –

+0

Hai contattato il fornitore del servizio web? Sembra un problema a tal fine, non necessariamente nell'applicazione consumante. –

risposta

0

Ho ricevuto un errore simile e causa un'eccezione nella serializzazione XML. Principalmente se xmlserializer prova a leggere alcune proprietà e il metodo get genera un'eccezione a causa di alcune connessioni al database già chiuse o di risorse non disponibili.

Hai provato a registrare le eccezioni nell'evento di errore all'interno di global.asax?

A volte se global.asax non genera un evento di errore, l'unico modo per registrare l'errore attraverso il filtro di risposta. È possibile aggiungere un filtro di risposta personalizzato nel web.config, in cui sarà possibile analizzare la quantità di XML correttamente serializzata e dove potrebbe non riuscire.

http://msdn.microsoft.com/en-us/library/aa479332.aspx

http://www.raboof.com/projects/elmah/

+0

Che cos'è global.asax? Questo non è un programma ASP.net. Come dovrei aggiungere l'aggiunta di un filtro di risposta personalizzato a web.config? –

+0

Ho aggiunto i collegamenti rilevanti –

1

Se si utilizza un client WCF per connettersi al servizio, abilitare il servizio di registrazione traccia nella vostra applicazione client con la seguente configurazione:

<system.diagnostics> 
    <trace autoflush="true" /> 
    <sources> 
     <source name="System.ServiceModel" 
         switchValue="Error" 
         propagateActivity="true"> 
      <listeners> 
       <add name="sdt" 
         type="System.Diagnostics.XmlWriterTraceListener" 
         initializeData= "ErrorTrace.svclog" 
         /> 
      </listeners> 
     </source> 
    </sources> 
</system.diagnostics> 

scaricare Windows sdk e hai un bel visualizzatore di tracce per questi file di log. Ti aiuta ad arrivare fino in fondo agli errori nella comunicazione WCF.

+0

Sfortunatamente sto usando WinForms (questo è un vecchio programma). Esistono funzionalità di traccia per WinForms? –

+0

È ancora possibile utilizzare un client WCF da winforms, ovvero se si è in .NET 3.0 o versioni successive. –

1

Utilizzando la comunicazione multipiattaforma a volte capita (una volta accaduto al mio codice) che l'eccezione generata non è la descrizione reale di ciò che sta accadendo all'interno.

Una causa di questa eccezione è che il tempo di risposta è leggermente inferiore al tempo richiesto dal metodo webservice per il completamento. Quindi prova ad aumentare il timeout nel tuo app.config.

Se non funziona potrebbero esserci due possibili problemi nel tuo caso.

  1. Se si utilizza SSL, c'è un problema con la validità del certificato SSL.
  2. Alcuni caratteri non validi sono utilizzati in XML, ad esempio la piattaforma non supporta i caratteri Unicode e vi è un carattere non supportato utilizzato in XML.

Ma spero che solo aumentando il timeout risolverà questo.

0

Intermedio "Una connessione esistente è stata forzatamente chiusa dall'host remoto" da una sola destinazione mi sembra un problema di rete.

Provare a ottenere i registri dal server a cui si tenta di accedere e dai firewall coinvolti in entrambe le posizioni. È possibile eseguire Fiddler o NetMon/WireShark/Ethereal per diagnosticare ulteriormente.

0

Il collegamento si verifica per qualsiasi circostanza. Assicurati che il timeout sia abbondante sul server e sul client, assicurati che non vi sia ricorsione nei dati che stai restituendo. Riferimento circolare La serializzazione è importante in questo caso perché la cosa viene serializzata quando viene restituita.

Fare un tracciante WCF e controllare la risposta lì. Qualsiasi errore nel server chiuderà la connessione. Se il server richiede un nome utente, assicurarsi che siano corretti. Prenditi cura dell'errore SSL. utilizzare il client WCF per testare il servizio.

0

Questo può essere un salto nel buio, ma qui è la mia teoria:

Il primo errore sta accadendo sul lato servizio web con un povero all'eccezione generata, forse un po 'di dati non validi si sta passando al servizio? Ciò potrebbe restituire l'errore relativo all'XML che non è corretto. Vorrei fare diversi test case per vedere quali dati vengono passati al servizio e quali sono le cause del problema.

Il secondo errore che ho visto prima in una certa circostanza per quanto riguarda un'eccezione di servizio Web generata e una traccia di prova racchiusa attorno a un'istruzione using per il servizio. Questa combinazione di logica ha causato un'uscita anticipata che non è stata ripulita.

0

cercano di controllare i protocolli esistenti nel tuo ultimo dell'azienda e confrontarli con la vostra azienda corrente, voglio dire il protocollo TCP/IP, ...

3

Recentemente ho ricevuto un messaggio simile quando si consumano un WCF-Webservice. Nel mio caso è diventato un errore di configurazione sul lato server. Forse qualcosa è configurato in modo diverso su un server in cui questo accade a voi? Il mio problema era che la dimensione massima predefinita dei messaggi era configurata per essere troppo piccola sul server e questo ha provocato la stessa chiusura forzata della connessione. Esiste una dimensione massima predefinita del messaggio per evitare attacchi DOS ...

0

Controllare la configurazione del riciclo del pool di app in IIS. Ho visto questo errore, ad esempio, quando il "Limite memoria privata" è impostato su un valore (diciamo 100mb) e quindi il processo w3wp supera questo limite che causerà il riciclo del pool di app.

Questo normalmente non è un problema poiché a tutte le connessioni esistenti viene concesso il tempo di completamento e le nuove connessioni verranno elaborate dal pool di app appena creato.

Se tutte le connessioni non vengono chiuse entro il limite di tempo di spegnimento (normalmente 90 secondi), vengono quindi eliminate da IIS e il client può sollevare l'errore "Una connessione esistente è stata chiusa forzatamente".

0

Non sono sicuro che questo sia applicabile alla situazione specifica dell'OP, ma questo potrebbe aiutare gli altri che arrivano qui al giorno d'oggi. Una possibile causa di questa eccezione riguarda i protocolli di sicurezza non corrispondenti. Se il server che stai chiamando richiede TLS 1.2 e stai utilizzando una versione precedente di ASP.net (< = Versione 4.0) utilizzerai un protocollo di protezione precedente per effettuare le chiamate, a meno che non lo cambi. È possibile forzare ASP.net a utilizzare TLS 1.2 (illustrato di seguito). Questo può essere fatto in qualsiasi punto dell'applicazione, ma ho messo poco prima della riga che chiama il servizio web che richiedono TLS 1.2:

using System.Net; 

... 

//Enable TLS 1.2 
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072; 

// Call the Web Service that requires TLS 1.2 
Problemi correlati