Noen ganger får jeg følgende feil mens jeg gjorde HttpWebRequest til en WebService. Jeg kopierte også koden min nedenfor.
System.Net.WebException: Kunne ikke koble til den eksterne serveren ---> System.Net.Sockets.SocketException: Ingen tilkobling kunne opprettes fordi målmaskinen aktivt avviste den 127.0.0.1:80 at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress) at System.Net.Sockets.Socket.InternalConnect(EndPoint remoteEP) at System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Int32 timeout, Exception& exception) --- End of inner exception stack trace --- at System.Net.HttpWebRequest.GetRequestStream()
ServicePointManager.CertificatePolicy = new TrustAllCertificatePolicy();
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.PreAuthenticate = true;
request.Credentials = networkCredential(sla);
request.Method = WebRequestMethods.Http.Post;
request.ContentType = "application/x-www-form-urlencoded";
request.Timeout = v_Timeout * 1000;
if (url.IndexOf("asmx") > 0 && parStartIndex > 0)
{
AppHelper.Logger.Append("#############" + sla.ServiceName);
using (StreamWriter reqWriter = new StreamWriter(request.GetRequestStream()))
{
while (true)
{
int index01 = parList.Length;
int index02 = parList.IndexOf("=");
if (parList.IndexOf("&") > 0)
index01 = parList.IndexOf("&");
string parName = parList.Substring(0, index02);
string parValue = parList.Substring(index02 + 1, index01 - index02 - 1);
reqWriter.Write("{0}={1}", HttpUtility.UrlEncode(parName), HttpUtility.UrlEncode(parValue));
if (index01 == parList.Length)
break;
reqWriter.Write("&");
parList = parList.Substring(index01 + 1);
}
}
}
else
{
request.ContentLength = 0;
}
response = (HttpWebResponse)request.GetResponse();
Hvis dette skjer alltid, betyr det bokstavelig talt at maskinen eksisterer, men at den ikke har noen tjenester som lytter på den angitte porten, eller at det er en brannmur som stopper deg.
Hvis det skjer av og til - du brukte ordet "noen ganger" - og det lykkes å prøve på nytt, er det sannsynligvis fordi serveren har en full "backlog".
Når du venter på å bli "akseptert" på en lyttekontakt, blir du plassert i en backlog. Denne etterslepet er begrenset og ganske kort - verdier på 1, 2 eller 3 er ikke uvanlig - og derfor kan det hende at operativsystemet ikke klarer å stille forespørselen din i kø for å "akseptere" å konsumere.
Etterslepet er en parameter på listen
-funksjonen - alle språk og plattformer har i utgangspunktet samme API i denne forbindelse, til og med C# one. Denne parameteren kan ofte konfigureres hvis du kontrollerer serveren, og leses sannsynligvis fra en innstillingsfil eller registeret. Undersøk hvordan du konfigurerer serveren din.
Hvis du skrev serveren, kan du ha tung prosessering i aksept av socket, og dette kan bedre flyttes til en egen arbeidstråd slik at aksept alltid er klar til å motta tilkoblinger. Det finnes ulike arkitekturvalg du kan utforske for å redusere køen av klienter og behandle dem sekvensielt.
*Uavhengig av om du kan øke serverens etterslep, trenger du retry logikk i klientkoden din for å takle dette problemet - selv med en lang etterslep kan serveren motta mange andre forespørsler på den porten på det tidspunktet.
Det er en sjelden mulighet der en NAT-ruter vil gi denne feilen hvis portene for tilordninger er oppbrukt. Jeg tror vi kan forkaste denne muligheten som for mye av et langskudd, siden ruteren har 64K samtidige tilkoblinger til samme destinasjonsadresse / port før utmattelse.
Den mest mulige årsaken er en brannmur.
Denne artikkelen inneholder et sett med årsaker. Det kan være nyttig for deg.
Fra artikkelen kan mulige årsaker være:
Dette skjedde med meg også ... Noen ganger når jeg åpner prosjektet mitt, vises denne feilen som var frustrerende. Problemet var at noen ganger endret portnummeret til webtjenesten seg uventet.
Dette problemet oppstår vanligvis når du har mer enn én kopi av prosjektet.
Prosjektet mitt kalte webtjenesten med et spesifikt portnummer som jeg tildelte i Web.Config-filen i hovedprosjektfilen min. Da portnummeret endret seg uventet, klarte ikke nettleseren å finne webtjenesten og ga denne feilen.
Jeg løste dette ved å følge trinnene nedenfor: (Visual Studio 2010)
Gå til Egenskaper for
Web service
prosjektet --> klikk på Web fanen --> I Servere seksjon --> Sjekk Spesifikk port og tilordne deretterstandardportnummeret
som hovedprosjektet ditt kaller webtjenesten med.
Jeg håper dette vil løse problemet.
Skål :)