[C#] HttpWebRequest loopt bij 2e keer vast

Pagina: 1
Acties:

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 15-05 14:44

_Thanatos_

Ja, en kaal

Topicstarter
Ik gebruik in een applicatie een HttpWebRequest om wat shit bij een website op te halen. Die website is in dit geval nog lokaal intranet, dus hij zou de data zeer snel moeten kunnen ophalen. Dat gaat ook goed, de eerste keer dan. Als ik dan de "download" knop nog een keer indruk, loopt de applicatie vast en na een minuut ofzo, crasht ie met een WebException met een timeout. Als ik de applicatie afsluit en opnieuw start. werkt het perfect, en op die manier kan ik de request ook zo vaak uitvoeren als ik wil.

Wat versimpelde code die de request uitvoert:
C#:
1
2
3
4
5
6
7
8
9
10
HttpWebRequest Request = (HttpWebRequest) HttpWebRequest.Create(URL);

Request.Method = "POST";
Request.ContentLength = Body.Length;

byte[] Bytes = new ASCIIEncoding().GetBytes(Body);
Request.GetRequestStream().Write(Bytes, 0, Bytes.Length);
WebResponse Response = Request.GetResponse();

Response.Close();

日本!🎌


Verwijderd

C#:
1
2
3
4
5
6
7
8
9
10
11
12
{ 
       WebRequest WReq = WebRequestFactory.Create(this.webAddress); 
       WebResponse WResp = WReq.GetResponse(); 
       // get the stream of data 
       StreamReader sr = new StreamReader(WResp.GetResponseStream(), Encoding.ASCII); 
       string strTemp = ""; 
        while ((strTemp = sr.ReadLine()) != null) 
        { 
              strSource.Append(strTemp + "\r\n"); 
        } 
        sr.Close(); 
} 

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 15-05 14:44

_Thanatos_

Ja, en kaal

Topicstarter
Dat is toch precies wat ik doe? Ik lees de response stream ook uit, maar dat hoort niet eens uit te maken.

日本!🎌


Verwijderd

Hrm.. ik gebruik wat andere objecten toch?

Maar, wat vertelt de debugger je?

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 15-05 14:44

_Thanatos_

Ja, en kaal

Topicstarter
De debugger returnt pas na een minuute ofzo op de GerResponse() methode, en komt dan in m'n catch-blokje en weet me te vertellen dat er een WebException opgegooit is met de melding "timeout". Meer niet.

Het probleem is dus die timeout, terwijl dezelfde URL in een browser perfect werkt. En of ik nou een GET of een POST doe, maakt ook niets uit.

日本!🎌


Verwijderd

ik heb geleerd het webrequest object niet direct te creeren omdat het absctract is maar het webrequestfactor object te gebruiken daarvoor. Maar jij gebruikt hele andere. webrequestfactor klasse is statisch en geeft een afgeleide van webrequest terug.

C#:
1
2
WebRequest WReq = WebRequestFactory.Create("http://www.tweakers.net");
WebResponse wResp = WReq.GetResponse(); 

[ Voor 3% gewijzigd door Verwijderd op 15-09-2004 12:20 ]


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 15-05 14:44

_Thanatos_

Ja, en kaal

Topicstarter
De class WebRequestFactory kan ik op MSDN niet vinden, en VS.NET snapt er ook niks van... bovendien, als ik een WebRequest ipv een HttpWebRequest gebruik, zijn er een aantal properties (waaronder UserAgent) niet beschikbaar.

日本!🎌


Verwijderd

Uit een de standaard msdn documentatie:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// Create a WebRequest object passing in the desired URI to the .Create() 
// method and then 
// get a response from the server by calling .GetResponse();
WebRequest WReq = WebRequestFactory.Create("http://www.mypeer-to-  
                                           peer.com/news.htm");
WebResponse WResp = WReq.GetResponse();

// Get a readable stream from the server - Encode the data to ASCII for 
// writing to the console
StreamReader sr = new StreamReader(WResp.GetResponseStream(), 
                                   Encoding.ASCII);

// Declare vars used for reading text
int length = 1024;
char [] Buffer = new char[1024];
int bytesread = 0;      

//Read from the stream and write any data to the console
bytesread = sr.Read( Buffer, 0, length);
while( bytesread > 0 ) 
{
    // If your application is a Windows Forms application, you might
    // append this data using a StringBuilder and then hand the data
    // to an HTML rendering control once it has all been downloaded.
    Console.Write( Buffer,0, bytesread);    
    bytesread = sr.Read( Buffer, 0, length);
}

//Close the stream when finished
sr.Close();
Wresp.GetResponseStream().Close();

Verwijderd

http://my.execpc.com/~gopalan/dotnet/webgetpost.html

moet het helemaal mee lukken! staat er goed uitgelegd

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 15-05 14:44

_Thanatos_

Ja, en kaal

Topicstarter
WebRequestFactory bestaat niet zeg ik toch... Bovendien stamt die site uit het beta-tijdperk van .NET :)

日本!🎌


Verwijderd

hehe mijn code ook ;-)

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 15-05 14:44

_Thanatos_

Ja, en kaal

Topicstarter
Oh wacht maar, ik heb al gevonden waarom het niet werkt... Als ik een POST doe, loopt ie wel vast, en bij een GET toch stiekem niet :)

Bleek dus dat ik de stream van de body van de request niet afsloot. Het moet dus zo:
C#:
1
2
3
Stream RequestStream = Request.GetRequestStream();
RequestStream.Write(Bytes, 0, Bytes.Length);
RequestStream.Close();

En verder deed ik het blijkbaar goed. Maar iig bedankt voor de hulp en inspiratie ;)

日本!🎌

Pagina: 1