2015-04-27 42 views
8

Ich erhalte diesen Fehler nur auf einem Server mit Windows Server 2003:C# System.Net.WebException: Die zugrunde liegende Verbindung wurde geschlossen: ein unerwarteter Fehler bei einer senden

System.Net.WebException: Die zugrunde liegende Verbindung wurde geschlossen: Beim Senden ist ein unerwarteter Fehler aufgetreten.


Hier ist mein Code ... Irgendwelche Ideen?

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https:// URL HERE "); 
//request.Headers.Add("Accept", "application/xml"); 
byte[] bytes; 
bytes = System.Text.Encoding.ASCII.GetBytes(xml); 
request.KeepAlive = false; 
request.Accept = "application/xml"; 
request.ContentType = "application/xml; charset='UTF-8'"; 
request.ContentLength = bytes.Length; 
request.Method = "POST"; 
request.Timeout = 10000; 
request.ServicePoint.Expect100Continue = false; 
+0

Welche Zeile wirft die Ausnahme? –

+0

@Jon Ihre URL ist https und es sieht so aus, als wäre das Cert möglicherweise nicht gültig. Sie müssen das Zertifikat akzeptieren. ServicePointManager.ServerCertificateValidationCallback = delegate {return true; }; Versuche das hinzuzufügen. – loneshark99

+0

@ loneshark99 NeinDas ist ein schrecklicher und schmutziger Hack, der niemals in irgendeinen Produktionscode eingefügt werden sollte. Das https-Protokoll wird sowieso vollständig von HttpWebRequest behandelt; es gibt keine Notwendigkeit, manuell mit sicheren TCP-Verbindungskram zu verwirren. – Nyerguds

Antwort

3

Dieses Problem tritt auf, wenn der Clientcomputer eine HTTP-Anforderung nicht senden kann. Der Clientcomputer kann die HTTP-Anforderung nicht senden, da die Verbindung geschlossen wurde oder nicht verfügbar ist. Dieses Problem kann auftreten, wenn der Clientcomputer viele Daten sendet. Um dieses Problem zu beheben, finden Sie in Auflösungen A, D, E, F und O.

https://support.microsoft.com/en-us/kb/915599

+3

lassen Sie uns wissen, welche der Optionen (A, D, E, F, O) funktioniert für Sie –

+0

Ich bekomme den Fehler bei HttpWebRequest Anfrage = (HttpWebRequest) WebRequest.Create Die Anfrage besteht nur aus 200 Zeichen. – Jon

+0

Ich bekomme den gleichen Fehler mit dem obigen Code – Jon

9

ich die gleichen Fehler, indem RestSharp mit .NET 4.5. Ich habe die gleiche URL mit cURL getestet und es hat gut funktioniert. Nach langem Debugging habe ich festgestellt, dass das SecurityProtocol das Problem behoben hat.

See: "The underlying connection was closed: An unexpected error occurred on a send." With SSL Certificate

+1

Dies. Es wird hauptsächlich von Websites verursacht, die eine höhere SSL/TLS-Version verwenden, als sie von dem verwendeten .Net-Framework aktiviert und/oder unterstützt werden. – Nyerguds

1

In meinem Fall, ich habe vergessen, das "s" von "https" zu entfernen, wenn ich URLs zwischen Umgebungen austauschen. Ich traf Localhost mit https bei einem Unfall. Die gleiche Situation tritt auf, wenn Sie eine http-Site ohne https-Zertifikat oder ein abgelaufenes Zertifikat aufrufen.

13

Die Einstellung HttpWebRequest.KeepAlive auf false funktionierte nicht für mich.

Da ich auf eine HTTPS-Seite zugegriffen habe, musste ich das Service Point Security Protocol auf Tls12 setzen.

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; 

Hinweis, dass es andere SecurityProtocolTypes:

SecurityProtocolType.Ssl3 
SecurityProtocolType.Tls 
SecurityProtocolType.Tls11 

Wenn also die Tls12 bei Ihnen nicht funktioniert, versuchen die drei verbleibenden Optionen.

Beachten Sie auch, dass Sie mehrere Protokolle festlegen können. Dies ist in den meisten Fällen vorzuziehen.

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12| SecurityProtocolType.Tls11 | SecurityProtocolType.Tls; 
+0

es funktioniert. Vielen Dank. –

+1

Da dies eine Auswahl von Sicherheitsstandards ist, ist es natürlich am besten, mit den neuesten (TLS 1.2 zum Schreiben) zu gehen, und nicht nur zu tun, was funktioniert. In der Tat ist SSL3 offiziell verboten (seit 2015) (https://tools.ietf.org/html/rfc7568) und TLS 1.0 wird voraussichtlich ab Juni 2018 verboten sein (https: //blog.pcisecuritystandards. org/migrating-from-ssl-und-early-tls). –

0

Ich habe mit diesem Fehler konfrontiert, während ich ein NuGet Paket Nexus Server manuell von der Kommandozeile mit API-KEY bereitstellen.

Ich habe die Nexus-Server-Konfiguration überprüft und habe erkannt, dass Nexus NuGet API-Key Realm nicht aktiviert ist. Ich habe es aktiviert und es erneut versucht, alles hat gut funktioniert.

enter image description here

Also, sollten Sie Serverseite überprüfen, die Sie betreffen Bereiche aktiviert zu bestätigen haben.