2009-04-20 12 views
8

.NET Compact Framework üzerinde eşzamansız bir HTTP (S) POST işlemi yapmaya çalışıyorum ve çalışmayı başaramıyorum..NET Compact Framework'de POST parametreleriyle eşzamansız WebRequest

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...*/ 
} 

... ama nedense ben DataLoadedCB ikinci satırda bir WebException olsun: Burada

ben yapıyorum

"Bu istek kimlik doğrulaması veya ilişkin verilerin önbelleğe alınması gerekmektedir yönlendirme başarılı olmak.

Basit bir HTTP GET yaptığımda tam olarak aynı kod mükemmel çalışır, ancak bazı POST param'larında attığımda, her şey başarısız olur.

Herhangi bir fikrin var mı?

cevap

12

Hiç bu kadar mutluyum! Soruma cevap buldum !!!

Bu küçük hat trick yaptı:

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

Bunu yakın ** ((HttpWebRequest) rqst) eklemek demek tahmin .KeepAlive = false; ** :) –