Domanda

Ho un'applicazione Web che sta eseguendo il polling di un servizio Web su un altro server. Il server si trova sulla stessa rete ed è referenziato da un IP interno, in esecuzione sulla porta 8080.

Ogni 15 secondi, viene inviata una richiesta, che riceve una risposta XML con le informazioni sul lavoro. Il 95% delle volte funziona bene, tuttavia a volte casuali, la richiesta al server è nulla e riporta una risposta "forzatamente chiusa dall'host remoto."

Ricercando questo problema, altri hanno impostato KeepAlive = false. Questo non ha risolto il problema. Il server Web esegue .NET 3.5 SP1.

Uri serverPath = new Uri(_Url);

// create the request and set the login credentials
_Req = (HttpWebRequest)WebRequest.Create(serverPath);
_Req.KeepAlive = false;
_Req.Credentials = new NetworkCredential(username, password);
_Req.Method = this._Method;

Chiama la risposta:

HttpWebResponse response = (HttpWebResponse)request.GetResponse();
_ResponseStream = response.GetResponseStream();

Il metodo per questo è GET. Ho provato a cambiare il timeout, ma l'impostazione predefinita è abbastanza grande da tenerne conto.

L'altra richiesta che eseguiamo è un POST per pubblicare dati sul server e stiamo riscontrando lo stesso problema anche in modo casuale. Non ci sono firewall che incidono su questo e abbiamo escluso lo scanner antivirus. Qualsiasi idea per aiutare a risolvere questo è molto apprezzata!

È stato utile?

Soluzione

Stai chiudendo il flusso di risposta e disponendo la risposta stessa? Questa è la causa più frequente di "blocco". con WebRequest: esiste un limite al numero di connessioni che è possibile aprire contemporaneamente sullo stesso computer. Il GC alla fine finalizzerà le connessioni, ma se le disponi correttamente non è un problema.

Altri suggerimenti

Non escluderei problemi di rete come possibile motivo di problemi. Hai eseguito un ping sul tuo server per vedere se ricevi pacchetti rilasciati che corrispondono alle stesse volte delle tue richieste fallite?

Imposta la proprietà di timeout dell'oggetto FtpWebRequest al massimo, l'ho provato con un file da 4 GB e funziona alla grande.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top