2012-03-26 28 views
0

私はWP7アプリケーションでHttpWebRequestを使用しようとしていますが、問題があります。私は決してサーバーからの応答を得ません:/HttpWebRequestが応答しない

私は間違っていますか?ここで

Utilのクラス

public class RequestState 
{ 
    // This class stores the State of the request. 
    const int BUFFER_SIZE = 1024; 
    public string requestData; 
    public byte[] Data 
    { 
     get 
     { 
      ASCIIEncoding ascii = new ASCIIEncoding(); 
      byte[] encodedPostData = ascii.GetBytes(this.requestData); 

      return encodedPostData; 
     } 
    } 
    public byte[] BufferRead; 
    public HttpWebRequest request; 
    public HttpWebResponse response; 

    public RequestState() 
    { 
     BufferRead = new byte[BUFFER_SIZE]; 
     requestData = string.Empty; 
     request = null; 
    } 
} 

方法...障害のあるコードの平和です...

private static ManualResetEvent allDone = new ManualResetEvent(false); 
private static string PostRequest(string service, string email, string password, string source) 
    { 
     // Prepare request. 
     HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(clientLoginUrl); 
     request.Method = "POST"; 
     request.ContentType = "application/x-www-form-urlencoded"; 

     // Create an instance of the RequestState and assign the previous myHttpWebRequest1 
     // object to it's request field. 
     RequestState myRequestState = new RequestState(); 
     myRequestState.request = request; 
     myRequestState.requestData = String.Format(postData, service, email, password, source); 

     // Get the response that will contain the Auth token. 
     try 
     { 
      request.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallback), myRequestState); 
     } 
     catch (WebException ex) 
     { 
      HttpWebResponse faultResponse = ex.Response as HttpWebResponse; 
      if (faultResponse != null && faultResponse.StatusCode == HttpStatusCode.Forbidden) 
       throw new IncorrectUsernameOrPasswordException(faultResponse.StatusCode, faultResponse.StatusDescription); 
      else 
       throw; 
     } 

     // Keep the main thread from continuing while the asynchronous 
     allDone.WaitOne(); 

     if (myRequestState.response != null) 
     { 
      // Check for login failed. 
      if (myRequestState.response.StatusCode != HttpStatusCode.OK) 
       throw new LoginFailedException(myRequestState.response.StatusCode, myRequestState.response.StatusDescription); 

      // Read. 
      using (StreamReader reader = new StreamReader(myRequestState.response.GetResponseStream())) 
       return reader.ReadToEnd(); 
     } 
     else 
      return string.Empty; 
    } 

    private static void GetRequestStreamCallback(IAsyncResult asynchronousResult) 
    { 
     RequestState requestState = (RequestState)asynchronousResult.AsyncState; 
     HttpWebRequest request = (HttpWebRequest)requestState.request; 

     // End the operation 
     Stream postStream = request.EndGetRequestStream(asynchronousResult); 

     // Write to the request stream. 
     postStream.Write(requestState.Data, 0, requestState.requestData.Length); 
     postStream.Close(); 

     // Start the asynchronous operation to get the response 
     request.BeginGetResponse(new AsyncCallback(GetResponseCallback), requestState); 
    } 
    private static void GetResponseCallback(IAsyncResult asynchronousResult) 
    { 
     RequestState requestState = (RequestState)asynchronousResult.AsyncState; 
     HttpWebRequest request = (HttpWebRequest)requestState.request; 

     // End the operation 
     HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asynchronousResult); 
     requestState.response = response; 

     allDone.Set(); 
    } 
+0

私はいつもこのようなことをしていますが、私は決してUIスレッドをブロックしません。私の提案は、別のスレッドでこれを試してみることです。あなたが返事を受け取ったかどうかを確認してください。何かがUIスレッドに来ようとしているかもしれませんが(何が分からないのか)、あなたのリクエストを完了できません。 –

+0

コードをお願いしますか? – rpf

+1

そのままそのままコードを実行し、System.Threading.ThreadPool.QueueUserWorkItem()を実行します。 –

答えて

0

あなたは運がなくて、いくつかの異なるウェブサイトへの要求を行うみました?

私もこの問題を抱えていました。これは、リクエストにいくつかのヘッダーオプションがないためです。 ブラウザーからWebサイトにリクエストをスニッフィングできるMozillaなどのプラグインをダウンロードし、リクエストからのヘッダーをHttpWebRequestのヘッダーに追加してください。