Toon posts:

[C#] GetRequestStream blokkeerd

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben bezig met een programma waarin ik een aantal requests uitvoer naar een HTTP server. De eerste 10 requests of zo gaan goed, maar daarna blokkeerd het programma op een regeltje waarbij ik de stream van de request op vraag. Even een stukje code om dit te illustreren:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
private void GetFolderInfo() 
{
    HttpWebRequest request = (HttpWebRequest) HttpWebRequest.Create(new Uri(finaluri));
    byte[] bytes = Encoding.ASCII.GetBytes(xmlGetFolderInfo);
    request.UserAgent = "Outlook Express/6.0 (MSIE 6.0; Windows NT 5.1; DigExt; MSNIA)";
    request.AllowAutoRedirect = false; 
    request.ContentLength = bytes.Length;
    request.ContentType = "text/xml"; request.Method = "PROPFIND";
    request.Credentials = credentials.GetCredential(new Uri(finaluri), authenticationScheme); request.KeepAlive = false;
    Stream stream = request.GetRequestStream();
    stream.Write(bytes, 0, bytes.Length);
    request.GetResponse();
}


Hij blokkeerd dus op de regel Stream stream = request.GetRequestStream(); Ik heb al gekeken hoe dat zou kunnen komen, maar ik heb geen idee. Ik stel precies dezelfde properties van de HttpWebRequest in als bij de voorgaande requests. Iemand een idee?

  • whoami
  • Registratie: December 2000
  • Laatst online: 12:26
Wat bedoel je precies met 'blokkeert'? Wacht gij gewoon?

Wat als je het eens als volgt doet:
code:
1
2
3
4
5
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create ( new Uri ( ...));
// zet hier al uw opties...
HttpWebResponse response = (HttpWebResponse)request.GetResponse();

Stream s = response.GetResponseStream;

https://fgheysels.github.io/


Verwijderd

Topicstarter
whoami schreef op 25 January 2003 @ 17:03:
Wat bedoel je precies met 'blokkeert'? Wacht gij gewoon?

Wat als je het eens als volgt doet:
code:
1
2
3
4
5
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create ( new Uri ( ...));
// zet hier al uw opties...
HttpWebResponse response = (HttpWebResponse)request.GetResponse();

Stream s = response.GetResponseStream;
Nou, wat ik daarmee bedoel is dat als ik regel voor regel door 't programma loop en ik dan die regel ga uitvoeren het programma gewoon wacht en verder niks meer doet. Overigens lijkt het me niet echt logisch om het omgekeerd te doen. Op het moment dat ik request.GetResponse() doe krijg ik al een antwoord van de server terwijl ik nog data moet versturen. Maar ik zal het zo even proberen, als m'n computer tenminste ffies opschiet :? :).

Verwijderd

Topicstarter
Als ik het dus andersom probeer blijft ie hangen op request.GetResponse(); 't lijkt wel alsof de site die 'k probeer te benaderen niet beschikbaar is of zo, maar als ik via telnet ga connecten werkt het wel.

  • whoami
  • Registratie: December 2000
  • Laatst online: 12:26
Als het files zijn die je wilt downloaden, moet je eens kijken naar de methods:
WebClient.DownloadFile()
en
WebClient.OpenRead();

https://fgheysels.github.io/


Verwijderd

Topicstarter
whoami schreef op 26 January 2003 @ 10:30:
Als het files zijn die je wilt downloaden, moet je eens kijken naar de methods:
WebClient.DownloadFile()
en
WebClient.OpenRead();
Files downloaden? Ik wil helemaal geen files downloaden. Ik wil een stukje XML naar de server sturen om vervolgens weer een stukje XML terug te krijgen.

  • whoami
  • Registratie: December 2000
  • Laatst online: 12:26
Als je eerst wilt sturen, waarom ga je dan eerst een request doen?
Request is luisteren / ophalen.

Kun je niets doen mbhv streamreaders en streamwriters?
Een connectie maken met die server via bv een TcpClient object, en dan de stream die je kunt uitlezen gebruiken om een streamreader en streamwriter object te maken:
code:
1
2
3
stream s = TcpClient1.GetNetworkStream();
StreamReader sr = new StreamReader(sr);
StreamWriter sw = new StreamWriter(sr);

Disclaimer: uit de losse pols, en ik ben niet zeker van die GetNetworkStream() method

https://fgheysels.github.io/


Verwijderd

Topicstarter
whoami schreef op 26 January 2003 @ 17:39:
Als je eerst wilt sturen, waarom ga je dan eerst een request doen?
Request is luisteren / ophalen.

Kun je niets doen mbhv streamreaders en streamwriters?
Een connectie maken met die server via bv een TcpClient object, en dan de stream die je kunt uitlezen gebruiken om een streamreader en streamwriter object te maken:
code:
1
2
3
stream s = TcpClient1.GetNetworkStream();
StreamReader sr = new StreamReader(sr);
StreamWriter sw = new StreamWriter(sr);

Disclaimer: uit de losse pols, en ik ben niet zeker van die GetNetworkStream() method
Die method heet inderdaad niet GetNetworkStream maar GetStream ;).

Maar ik zal even een stukje code laten zien van een andere methode die op iets vergelijkbaars doet.

code:
1
2
3
4
5
6
7
HttpWebRequest request = (HttpWebRequest) HttpWebRequest.Create(new Uri(uri));
request.AllowAutoRedirect = false; request.KeepAlive = false; request.ContentType = "text/xml"; request.Method = "PROPFIND";
request.UserAgent = "Outlook Express/6.0 (MSIE 6.0; Windows NT 5.1; DigExt; MSNIA)"; 
if (authenticationscheme != "") request.Credentials = credentials.GetCredential(new Uri(uri), authenticationscheme);
byte[] bytes = Encoding.ASCII.GetBytes(xmlQueryFolders);
request.ContentLength = bytes.Length;
request.GetRequestStream().Write(bytes, 0, bytes.Length);


Dit is dus code die ongeveer een zelfde taak moet uitvoeren als de code die 'k gaf aan 't begin van dit topic. Wat dus de bedoeling is is dat ik een stukje XML naar de server stuurt (een request doe dus), dat de server dat stukje XML in vult en vervolgens weer terug stuurt (een response). Ik begrijp alleen dus niet waarom het programma blijft hangen als ik de laatste request doe.
Pagina: 1