2

このコード スニペットを使用して POST リクエストを送信しています。

public IObservable<string> BeginPost(Uri uri, string postData)
{
    var request = HttpWebRequest.CreateHttp(uri);
    request.Method = "POST";
    request.ContentType = "application/x-www-form-urlencoded";

    var fetchRequestStream = Observable.FromAsyncPattern<Stream>(request.BeginGetRequestStream, request.EndGetRequestStream);
    var fetchResponse = Observable.FromAsyncPattern<WebResponse>(request.BeginGetResponse, request.EndGetResponse);
    return fetchRequestStream().SelectMany(stream =>
    {
        using (var writer = new StreamWriter(stream)) writer.Write(postData);
        return fetchResponse();
    }).Select(result =>
    {
        var response = (HttpWebResponse)result;
        string s = "";
        if (response.StatusCode == HttpStatusCode.OK)
        {
            using (var reader = new StreamReader(response.GetResponseStream())) 
                s = reader.ReadToEnd();
        }
        return s;
    });
}

IObservable私は C# が初めてで、なぜこのインターフェイスを使用する必要があるのか​​よくわかりません。インターネット上でそれに関する情報を見つけようとしましたが、見つかりませんでした。

私が本当に必要としているのは、webservice から として応答をstring取得することですIObservable<string>。基本的に、どうすればそこstringから取得できますか?

これは少しばかげた質問であることは承知していますが、これについて詳しく読むことができるサイトへのリンクもいただければ幸いです。

4

1 に答える 1

4

IObservable を使用する必要はありません。Reactive Extensionsを扱っている人からこのコードを入手したと思います。この背後にある考え方は、この「イベント」にサブスクライブし、リクエストが行われるたびに文字列が送信されるというものです。Reactive Extensions の詳細については、最新のこの質問への回答 Reactive Extension (Rx) tutorial を参照してください。

Reactive Extensions を使用したくない場合は、RestSharpを使用することをお勧めします。Windows Phone でも動作する優れたライブラリで、使用方法に関するサンプルが多数あります。

于 2013-01-07T10:17:02.717 に答える