0

아래 코드에서 DoGet은 매우 안정적으로 작동합니다. 그러나 DoPost는 을 IncatOptationException을 uncheckable 임의로 throw합니다. 나는 길을 잃었다. 어떤 포인터가 엄청난 도움이 될 것입니다.C# smartdevice - HTTPWEBREQUEST GET 대 POST InvalidOperationException

/* 
    Environment 
    ------------- 
    * NET CF 2.0 
    * WM 5.0(USA Mobile Pocket PC Emulator) 
    * Windows XP Professional SP2 
    * VS 2008 
*/ 

/* 
    The exception 
    ------------------ 
    at System.Net.HttpWebRequest.set_ContentLength(Int64 value) 
    at System.Net.HttpWebRequest.BufferConnectStream.WritingSucceeds() 
    at System.Net.HttpWriteStream.doClose() 
    at System.Net.HttpWriteStream.Finalize() 
*/ 

public static string DoPost(string url) 
{ 
    // initialize from variables 
    string responseString = string.Empty; 
    ASCIIEncoding encoding = new ASCIIEncoding(); 
    HttpWebResponse response; 
    byte[] data = encoding.GetBytes("dummy"); 
    StreamReader reader; 
    HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url); 

    //do the processing 
    SetRequestProperties(request, "POST"); // SETTING METHOD TO POST HERE 
    request.GetRequestStream().Write(data, 0, data.Length); 
    request.GetRequestStream().Close(); 
    response = (HttpWebResponse)request.GetResponse(); 
    reader = new StreamReader(response.GetResponseStream()); 
    responseString = reader.ReadToEnd(); 

    //clean up 
    response.Close(); 
    response.GetResponseStream().Close(); 
    response.GetResponseStream().Dispose(); 
    reader.Close(); 
    reader.Dispose(); 
    reader = null; 
    response = null; 
    request = null; 
    encoding = null; 

    //return 
    MessageBox.Show("POST SUCCESS"); 
    return responseString; 

} 

public static string DoGet(string url) 
{ 
    // initialize from variables 
    string responseString = string.Empty; 
    ASCIIEncoding encoding = new ASCIIEncoding(); 
    HttpWebResponse response; 
    byte[] data = encoding.GetBytes("dummy"); 
    StreamReader reader; 
    HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url); 

    //do the processing 
    SetRequestProperties(request, "GET"); // SETTING METHOD TO GET HERE 
    response = (HttpWebResponse)request.GetResponse(); 
    reader = new StreamReader(response.GetResponseStream()); 
    responseString = reader.ReadToEnd(); 

    //clean up 
    response.Close(); 
    response.GetResponseStream().Close(); 
    response.GetResponseStream().Dispose(); 
    reader.Close(); 
    reader.Dispose(); 
    reader = null; 
    response = null; 
    request = null; 
    encoding = null; 

    //return 
    MessageBox.Show("GET SUCCESS"); 
    return responseString; 

} 

private static void SetRequestProperties(HttpWebRequest request, string s) 
{ 
    request.Method = s; 
    request.AllowWriteStreamBuffering = true; 
    request.KeepAlive = false; 
    request.ContentType = "application/x-www-form-urlencoded"; 
    request.SendChunked = false; 
    request.Credentials = CredentialCache.DefaultCredentials; 
    request.UserAgent = "my mobile user agent"; 
    request.Timeout = 60000; 
    request.ProtocolVersion = new System.Version("1.1"); 
} 

답변

0

이 내용은 다음 링크와 관련되어 있습니다. link text?

+0

응용 프로그램의 로그를 가져 와서 pastebin에 저장할 수 있습니까? http://ferozedaud.blogspot.com/2009/08/tracing-with-systemnet.html에 나와있는대로 config 파일을 사용하여 로그를 가져옵니다. 로그에 현재 상황이 표시됩니다. – feroze

+0

안녕하세요. 감사합니다. 이 로깅은 소형 프레임 워크에서 작동합니까? 어쨌든, 나는 시도 할 것이다. 감사. /cethie – cethie

+0

OOPS! 예외는 클라이언트 측 (요청이 전송되는 모바일 장치의 System.Net)입니다. .NET Compact 프레임 워크를 사용하는 응용 프로그램은 app.config 등을 가질 수 없으므로 추적 할 수 있는지 확실하지 않습니다. ( – cethie