この文書の原文

How to: Make Requests to HTTP-Based Services

HTTP リクエストが特定の URI に送られるとき、 HTTP ベースのサービスがデータを返します。

HTTP リクエストは、いろいろな URI に送られることができます。たとえば、次のような URI があります。http://fabrikam.com/service/getUser , http://fabrikam.com/service.svc/getUser 。あるいは http://fabrikam.com/data.xml のような静的データでもかまいません。通常、HTTP リクエストは、読出しを暗示する GET 動詞、あるいは呼出しを暗示する POST 動詞で構成されます。アクセスしようとするサービスには、リクエストにパラメータを添付する必要があるかもしれません。通常、HTTP GET に対するパラメータは、 http://fabrikam.com/service/getUser?id=123 のように、URI の終わりに添えられます。 HTTP POST の場合は、どんなパラメータでも HTTP リクエストの本体の一部です。

サービスが返すデータは、HTTP レスポンスに含まれます。データの構成は、サービス実装に依存します。HTTP ベースのサービスによって返されるものには、XML、JSON、あるいは RSS / Atom などの共通データ フォーマットを含みます。通常、データの構成およびそのスキーマ(標準スキーマを持っている RSS / Atom のケースを除いて)は、サービス開発者によって人間が読むことができるドキュメントで記述されます(編注:別途、スキーマ解説書が提供されています)

Silverlight は HTTP リクエストを送る、2つの方法を提供します: WebClient および HttpWebReqest です。後者は前者より多くのカスタマイゼーションおよび柔軟性を提供します。そしてこの項目で使われます。

HTTP ベースのサービスを呼び出す

  1. リクエストを送る URI を作成します。この URI は、たとえば RSS / Atom を供給する /data.xml ファイルなどの静的データを含みます。

    Uri serviceUri = new Uri("http://fabrikam.com/service/getUser");
  2. もし、サービスが Silverlight コントロールとは異なるドメインによってホストされているなら、クロス ドメイン アクセスのためのオプション定義が不可欠です。詳しくは、「How to: Make a Service Available Across Domain Boundaries」をご覧ください。

  3. リクエストを作成します。デフォルトでは、Method プロパティは、"GET" に設定されています。

    HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(serviceUri);
  4. HttpWebRequest は、非同期のリクエストのみをサポートしています。非同期リクエストを行って、そしてコールバックを登録してください。

    request.BeginGetResponse(new AsyncCallback(responseHandler), request);
  5. responseHandler 関数を定義して、そして HttpWebResponse を受け取ります。

    void responseHandler(IAsyncResult asyncResult)
    {
          HttpWebRequest request = (HttpWebRequest)asyncResult.AsyncState;
          HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asyncResult);
    }
  6. responseHandler で作業を続けます。レスポンスを含む Stream を取得します。

    Stream responseStream = response.GetResponseStream();
  7. データに含まれる項目、応答のタイプによって、「Working with XML Data in Silverlight」「Working with JSON Data in Silverlight」、あるいは「Working with RSS or Atom Feeds」で記述されたプロシージャを続けてください。

Example


public void HowToMakeRequestsToHttpBasedServices()
{
   Uri serviceUri = new Uri("http://fabrikam.com/service/getUser");
   HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(serviceUri);
   request.BeginGetResponse(new AsyncCallback(responseHandler), request);
}

void responseHandler(IAsyncResult asyncResult)
{
   HttpWebRequest request = (HttpWebRequest)asyncResult.AsyncState;
   HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asyncResult);
   Stream responseStream = response.GetResponseStream();
}