2014-12-10 9 views
5

Ho un problema molto strano con System.Net.HttpWebRequest, che mi sta facendo impazzire: quando lo eseguo con un indirizzo localhost, quindi è estremamente lento (circa 30 secondi) o, nella maggior parte dei casi, si esaurisce completamente. Ciò si verifica solo con richieste indirizzate allo localhost e solo dal codice C#.Richiesta Web non riuscita, ma solo per localhost e quando si utilizza System.Net.HttpWebRequest

In concreto, l'assunzione di un progetto Web API ASP.NET come esempio, quando ho questo codice:

[Test] 
public void TestRequest() 
{ 
    var request = WebRequest.Create("http://localhost:64497/api/values"); 
    WebResponse response = request.GetResponse(); 
} 

..è sarà il più delle volte non riuscire con questa eccezione:

System.Net.WebException: impossibile connettersi al server remoto
----> System.Net.Sockets.SocketException: un tentativo di connessione non riuscito perché la parte connessa non ha risposto correttamente dopo un periodo di tempo o connessione stabilita non riuscita perché host connesso ha riuscito a rispondere 127.0.0.1:64497

Ispezionando il codice .NET, ho rintracciato l'errore al WSAConnect API restituire un valore non nullo, ma non riesco a vedere che questo è di molto aiuto. (Tuttavia, questa è un'API a 32 bit, mentre sono in esecuzione su un sistema a 64 bit. Ci potrebbe essere qualche strano problema 32/64bit?)

Quando eseguo il codice di cui sopra con un indirizzo diverso da localhost (diciamo http://www.google.com), quindi si comporta normalmente e ottengo tempi di risposta di circa 1 sec. Inoltre, quando invio la richiesta di cui sopra da un altro client (ho usato Chrome Advanced REST Client), ho ottenuto il comportamento normale: un ritardo di circa 5-8 secondi per la prima richiesta dovuta alla compilazione iniziale e tempi di risposta molto brevi (20-40 msec) per tutte le richieste successive.

luce di questi risultati, sembra abbastanza ovvio per me che il problema deve venire da qualcosa che è specifico per l'implementazione della classe System.Net.HttpWebRequest ...

L'applicazione web stesso è ospitato su IIS Express, ma io' Sono abbastanza sicuro che ciò sia irrilevante, dal momento che la richiesta di cui sopra non raggiunge mai il web server (ho controllato che sia eseguendo IIS Express dalla riga di comando e poi ispezionando le richieste che arrivano e anche per ProcessMonitor).

Ulteriori informazioni: Sono in esecuzione Windows 8.1 a 64 bit e VS 2013 SP4 pro. Il file HOST del sistema non è modificato, ovvero non contiene voci.

Le cose che ho provato finora:

  • esecuzione VS in modalità amministratore
  • Spegnimento tutti i firewall e software antivirus
  • utilizzando IIS invece di IIS espresso
  • proxysettings impostazione esplicitamente su null , sia per codice che per configurazione
  • ispezionando il processo IIS Express per ProcessMonitor - nessun risultato (come ho detto, sono abbastanza sicuro che il server Web non è direttamente inv olved in questo problema)
  • cambiare localhost a 127.0.0.1

non capisco quale sia il problema, e non riesco a trovare alcuna info rilevante sul web. Non ho nemmeno più idee su cosa potrei provare a rintracciare l'errore. In altre parole: sono totalmente bloccato su questo, e in effetti mi impedisce di scrivere qualsiasi test di integrazione contro web ospitati localmente. Qualsiasi aiuto/suggerimento/suggerimento è molto apprezzato.

+1

Non c'è risposta in quell'altro numero ... Gradirei uno, come sono bloccato su questo stesso problema :) – ahaaman

risposta

0

Solo per controllare questa parte: "Ispezionando il codice .NET, ho rintracciato l'errore all'API WSAConnect restituendo un valore non nullo, ma non riesco a vedere che questo sia di grande aiuto. , questa è un'API a 32 bit, mentre sono in esecuzione su un sistema a 64 bit. Potrebbe esserci qualche strano problema a 32/64 bit?) "

Assicurarsi che in IIS, per il pool di applicazioni, sia presente 32 bit. abilitato (l'impostazione predefinita è disabilitata).

Inoltre, presumo che l'associazione sia impostata correttamente. (l'ultima parte [binding] doveva essere un commento, ma non avevo il rappresentante - è stato cancellato, apparentemente o sarà)

Problemi correlati