2011-03-02 28 views
1

私はHttp POSTを実行するメソッドを持っており、HttpWebRequestを使って実行しているので、このメソッドは非同期呼び出しに依存しています。私のHttp POSTのレスポンスコードを返すメソッドが必要なので、私はメソッドを非同期にしたい。これはどうすればいいですか?非同期メソッドの作成方法は?

私はDispatcherを使用することを考えていました。だから私のコードの構造の基本的な概要は、次のようになります:

EDIT

string response; 

string httpPost(){ 
    HttpWebRequest.BeginGetRequestStream(new AsyncCallback(requestCallback), httpWebRequest); 
    return response; 
} 

void requestCallback(IAsyncResult asyncResult){ 
    HttpWebRequest.EndGetRequestStream(asyncResult); 
    HttpWebRequest.BeginGetResponse(new AsyncCallback(responseCallback), httpWebRequest); 
} 

void responseCallback(IAsyncResult asyncResult){ 
    HttpWebResponse webResponse = (HttpWebResponse) HttpWebRequest.EndGetResponse(asyncResult); 
    response = webResponse.StatusCode.ToString(); 
} 

私は非同期メソッドにhttpPostを()を変更したいです。

EDIT2:WP7で

public static void httpPost(Action<string> completed) 
{   
    HttpWebRequest.BeginGetRequestStream(new AsyncCallback(requestCallback), httpWebRequest); 
    completed(HttpEngine.response); 
} 

答えて

1

、HttpWebRequestのはすでに非同期になります - その使用例のために、と呼び出されhttp://www.rudigrobler.net/blog/wp7-webclient-vs-httpwebrequest

 public void DoThePost(Action<string> onSuccess) 
{ 
    var request = (HttpWebRequest)WebRequest.Create(new Uri("http://www.sherdog.com/rss/news.xml")); 
    request.BeginGetResponse(r => 
    { 
      var httpRequest = (HttpWebRequest)r.AsyncState; 
      var httpResponse = (HttpWebResponse)httpRequest.EndGetResponse(r); 

      using (var reader = new StreamReader(httpResponse.GetResponseStream())) 
      { 
       var response = reader.ReadToEnd(); 

       Deployment.Current.Dispatcher.BeginInvoke(new Action(() => 
        { 
         onSuccess(response); 
        })); 
      } 
    }, request); 
} 

からこのコードを参照してください。

DoPost((responseText) => { responseTextBlock.Text = responseText;}); 
+0

私はHttp PostのHttpWebRequestを実行するメソッドを持っていますが、HttpWebRequestは非同期で、私は応答を返すしたい、私は私のメソッドも非同期にしたいです。 – Hank

+0

私はあなたの編集が実際にはあまり明確でないと思います。 HTTP投稿が発生したときに何らかのアクションが発生するようにしたい場合は、私が行った変更を見てください。 – Stuart

+0

私は応答を返したいが、応答はHTTP Postが終了するまで待たなければならない。つまり、現在のフォームでメソッドを呼び出すと、HTTP Postが終了していないため、応答が得られません。私はhttpPostを呼び出すときにHTTP Postは完了していないので、それがウェブ応答するのではなく、「開始」を返します、「開始」する応答を初期化すると言います。ですから、httpPostメソッドを非同期にして別のクラスで処理したいと思います。 – Hank

関連する問題