2009-04-20 11 views
8

Próbuję wykonać asynchroniczny moduł POST protokołu HTTP (S) w .NET Compact Framework i nie mogę sprawić, żeby działało.Asynchroniczne wywołanie WebRequest z parametrami POST w .NET Compact Framework

Oto co robię:

private void sendRequest(string url, string method, string postdata) { 
    WebRequest rqst = HttpWebRequest.Create(url); 
    CredentialCache creds = new CredentialCache(); 
    creds.Add(new Uri(url), "Basic", new NetworkCredential(this.Uname, this.Pwd)); 
    rqst.Credentials = creds; 
    rqst.Method = method; 
    if (!String.IsNullOrEmpty(postdata)) { 
     rqst.ContentType = "application/xml"; 
     byte[] byteData = UTF8Encoding.UTF8.GetBytes(postdata); 
     rqst.ContentLength = byteData.Length; 
     using (Stream postStream = rqst.GetRequestStream()) { 
      postStream.Write(byteData, 0, byteData.Length); 
      postStream.Close(); 
     } 
    } 
    ((HttpWebRequest)rqst).KeepAlive = false; 
    rqst.BeginGetResponse(DataLoadedCB, rqst); 
} 

private void DataLoadedCB(IAsyncResult result) { 
    WebRequest rqst = ((WebRequest)(((BCRqst)result.AsyncState).rqst)); 
    WebResponse rsps = rqst.EndGetResponse(result); 

    /* ETC...*/ 
} 

... ale z jakiegoś powodu otrzymuję WebException w drugim rzędzie DataLoadedCB:

„Wniosek ten wymaga buforowania danych w celu uwierzytelnienia lub przekierowanie na sukces. "

Dokładnie ten sam kod działa doskonale, kiedy robię proste wywoływanie HTTP, ale kiedy wrzucam niektóre parametry POST, wszystko zawiedzie.

Wszelkie pomysły?

Odpowiedz

12

Jestem bardzo szczęśliwy! Znalazłem odpowiedź na moje pytanie !!!

Ta mała linia wystarczyły:

((HttpWebRequest)rqst).AllowWriteStreamBuffering = true; 
+1

Przypuszczam, to znaczy, aby dodać pobliżu ** ((HttpWebRequest) rqst) .KeepAlive = false; ** :) –

Powiązane problemy