Invio di una richiesta POST: System.Net.WebException
-
05-07-2019 - |
Domanda
Non è la prima volta che utilizzo questo metodo per inviare una richiesta POST e non ho mai avuto problemi:
public static Stream SendPostRequest(Uri uri, byte[] postData)
{
var request = WebRequest.Create(uri);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = postData.Length;
Stream requestStream = request.GetRequestStream();
requestStream.Write(postData, 0, postData.Length);
requestStream.Close();
return request.GetResponse().GetResponseStream();
}
On request.GetRequestStream () Ricevo un System.Net.WebException: la connessione sottostante è stata chiusa: si è verificato un errore imprevisto durante l'invio.
Ancora più interessante, funziona perfettamente su alcune macchine, ma non funziona sulla mia macchina (Windows 7 Beta) e sul server di produzione (Windows Server 2008). Ulteriori informazioni:
Funziona - Windows Xp - .NET 2.0
Funziona - Windows Xp - .NET 3.5
Funziona - Windows Server 2003 - .NET 3.0
Non funziona - Windows Vista - .NET 3.5
Non funziona - Windows Server 2008 - .NET 3.5
Non funziona - Windows 7 Beta - .NET 3.5 SP1
Provato:
- Mazzo di cose da qui , nulla ha aiutato.
- Utilizzando WebClient , nulla è cambiato.
- Ritoccando queste , ma non è stato possibile notare alcuna differenza notevole.
- Ho provato WireShark . Un ottimo strumento.
[Risolto. Kinda]
Ho dimenticato di menzionare, ma Uri era https ... Ho provato http e ha funzionato. Non ci posso credere, non ci ho provato prima ...
Tuttavia, apprezzerei se qualcuno facesse luce su tutta questa situazione.
Soluzione
Il mio primo piano di attacco sarebbe quello di utilizzare WireShark per vedere cosa succede a livello di rete in ogni caso. Guarda cosa invia ogni macchina.
Inoltre, hai notato differenze tra i sistemi operativi, ma tutti hanno la stessa identica versione di .NET (fino a SP) installata?
Altri suggerimenti
I GET funzionano? Forse si tratta di un problema di configurazione proxy ( proxycfg
ecc.)
Inoltre - per semplificare le cose (ridurre il numero di incognite), considera l'utilizzo di WebClient
per scrivere il post:
using (WebClient client = new WebClient())
{
client.Headers.Add("content-type","application/x-www-form-urlencoded");
client.UploadData(address, data);
// or more simply
client.UploadValues(address, nameValuePairs);
}
Prova a modificare una o più delle seguenti opzioni:
- SendChucked
- AllowAutoRedirect
- TransferEncoding
Prova anche a notare le differenze tra loro con le tue varie configurazioni.