次の方法で共有


WebRequest からの派生

WebRequest クラスは抽象基本クラスであり、.NET Framework のプラグ可能なプロトコル モデルに適合するプロトコル固有の要求ハンドラを作成するために、基本的なメソッドおよびプロパティを提供します。WebRequest クラスを使用するアプリケーションは、使用するプロトコルを指定しなくても、サポートしているプロトコルを使用するデータを要求できます。

プロトコル固有のクラスをプラグ可能なプロトコルとして使用するには、2 つの基準を満たす必要があります。つまり、クラスは IWebRequestCreate インターフェイスを実装し、そのインターフェイスを WebRequest.RegisterPrefix メソッドによって登録する必要があります。このクラスは、プラグ可能なインターフェイスを提供するには、WebRequest のすべての抽象メソッドおよびプロパティをオーバーライドする必要があります。

WebRequest インスタンスは、1 回しか使用できません。別の要求を行う場合は、WebRequest を新たに作成します。WebRequest では、テンプレート WebRequest をシリアル化し、追加の要求に応じてそのテンプレートを再構築するために、ISerializable インターフェイスをサポートしています。

IWebRequest Create メソッド

Create メソッドは、プロトコル固有のクラスの新しいインスタンスの初期化を実行します。新しい WebRequest が作成されると、WebRequest.Create メソッドは、要求された URI と RegisterPrefix メソッドによって登録された URI のプレフィックスを突き合わせます。Create メソッドがプロトコル固有の子孫のメソッドとして適切である場合、プロトコル固有のフィールドを変更しなくても標準的な要求/応答トランザクションを実行できる子孫の、初期化されたインスタンスを返します。

ConnectionGroupName プロパティ

ConnectionGroupName プロパティを使用してリソースに対する接続のグループに名前を付け、1 つの接続で複数の要求を実行できるようにします。接続の共有を実施するには、接続のプールおよび割り当てのためのプロトコル固有のメソッドを使用する必要があります。たとえば、提供されている ServicePointManager クラスは、HttpWebRequest クラスの接続の共有を実施します。ServicePointManager クラスは、接続グループごとの特定のサーバーへの接続を提供する ServicePoint を作成します。

ContentLength プロパティ

ContentLength プロパティは、データのアップロード時にサーバーに送信されるデータのバイト数を指定します。

通常、Method プロパティは、ContentLength プロパティが 0 より大きい値に設定されている場合にアップロードが行われるように設定する必要があります。

ContentType プロパティ

ContentType プロパティは、プロトコルが送信内容の種類を識別するためにサーバーに送信するよう要求する、すべての特殊な情報を提供します。通常これは、アップロードされるすべてのデータの MIME コンテンツの種類です。

Credentials プロパティ

Credentials プロパティには、サーバーによる要求を認証するために必要な情報が含まれています。使用しているプロトコルに合わせて、詳細な認証プロセスを実装する必要があります。AuthenticationManager クラスは、要求を認証し、認証トークンを提供します。プロトコルで使用される資格情報を提供するこのクラスは、ICredentials インターフェイスを実装している必要があります。

Headers プロパティ

Headers プロパティには、要求に関連付けられたメタデータの名前と値のペアの任意のコレクションが含まれています。名前と値のペアとして表すことができるプロトコルに必要なメタデータはすべて、Headers プロパティに含まれます。通常、この情報は、GetRequestStream メソッドまたは GetResponse メソッドを呼び出す前に設定しておく必要があります。要求が行われると、メタデータは読み取り専用と見なされます。

ヘッダー メタデータを使用するために Headers プロパティを使用する必要はありません。プロトコル固有のメタデータは、プロパティとして公開できます。たとえば、HttpWebRequest.UserAgent プロパティは、User-Agent HTTP ヘッダーを公開します。ヘッダー メタデータをプロパティとして公開する場合は、Headers プロパティを使用して同じプロパティを設定することはできません。

Method プロパティ

Method プロパティには、要求がサーバーに実行するように求める動詞またはアクションが含まれています。Method プロパティの既定値は、プロトコル固有のプロパティの設定を要求せずに、標準の要求/応答アクションを有効にする必要があります。たとえば、HttpWebResponse メソッドの既定値は GET であるため、Web サーバーからリソースを要求し、応答を返します。

通常、Method プロパティにアップロード中であることを示す動詞またはアクションが設定されているときは、ContentLength プロパティを 0 より大きい値に設定します。

PreAuthenticate プロパティ

アプリケーションは PreAuthenticate プロパティを設定して、認証チャレンジを待つのではなく、最初の要求で認証情報を送信するようにします。PreAuthenticate プロパティに意味があるのは、プロトコルが最初の要求で送信された認証資格情報をサポートしている場合だけです。

Proxy プロパティ

Proxy プロパティには、要求したリソースにアクセスするために使用される IWebProxy インターフェイスが含まれています。Proxy プロパティに意味があるのは、プロトコルがプロキシ要求をサポートしている場合だけです。プロトコルで要求される場合には、既定のプロキシを設定する必要があります。

企業のファイアウォール内部などの環境では、プロトコルにプロキシを使用することがあります。その場合は、IWebProxy インターフェイスを実装して、プロトコルで使用するプロキシ クラスを作成する必要があります。

RequestUri プロパティ

RequestUri プロパティには、WebRequest.Create メソッドに渡された URI が含まれています。読み取り専用のため、WebRequest の作成後は変更できなくなります。プロトコルがリダイレクトをサポートしている場合、異なる URI によって識別されるリソースからの応答を受け取ることができます。応答した URI にアクセスする必要がある場合は、その URI を含む追加のプロパティを提供します。

Timeout プロパティ

Timeout プロパティには、要求がタイムアウトになり例外をスローするまで待つ、ミリ秒単位の時間の長さが含まれています。Timeout は、GetResponse メソッドによって行われる同期要求にだけ適用されます。非同期要求は、Abort メソッドを使用して保留状態の要求をキャンセルする必要があります。

Timeout プロパティの設定に意味があるのは、プロトコル固有のクラスがタイムアウト プロセスを実装する場合だけです。

Abort メソッド

Abort メソッドは、サーバーに対する保留状態の非同期要求をキャンセルします。要求がキャンセルされた後で、GetResponseBeginGetResponseEndGetResponseGetRequestStreamBeginGetRequestStream、または EndGetRequestStream を呼び出すと、Status プロパティを RequestCanceled に設定して、WebException がスローされます。

BeginGetRequestStream メソッドと EndGetRequestStream メソッド

BeginGetRequestStream メソッドは、サーバーへのデータのアップロードに使用するストリームのために、非同期要求を開始します。EndGetRequestStream メソッドは、非同期要求を完了し、要求されたストリームを返します。これらのメソッドは、標準 .NET Framework 非同期パターンを使用して GetRequestStream を実装します。

BeginGetResponse メソッドと EndGetResponse メソッド

BeginGetResponse メソッドは、サーバーに対する非同期要求を開始します。EndGetResponse メソッドは、非同期要求を完了し、要求された応答を返します。これらのメソッドは、標準 .NET Framework 非同期パターンを使用して GetResponse メソッドを実装します。

GetRequestStream メソッド

GetRequestStream メソッドは、要求されたサーバーにデータを書き込むために使用するストリームを返します。返されるストリームは、シークしない書き込み専用ストリームである必要があります。したがってサーバーに書き込むだけの一方向のデータ ストリームと想定されます。このストリームは、CanRead プロパティと CanSeek プロパティに対しては false を返し、CanWrite プロパティに対しては true を返します。

通常、GetRequestStream メソッドはサーバーへの接続を開いて、ストリームを返す前に、データがサーバーに送信されることを示すヘッダー情報を送信します。GetRequestStream が要求を開始するため、通常、GetRequestStream を呼び出した後に Header プロパティまたは ContentLength プロパティを設定することは許可されません。

GetResponse メソッド

GetResponse メソッドは、サーバーからの応答を表す WebResponse クラスのプロトコル固有の子孫を返します。要求が GetRequestStream メソッドによって既に開始されている場合を除いて、GetResponse メソッドは RequestUri によって識別されるリソースへの接続を作成し、行われる要求の種類を示すヘッダー情報を送信してから、そのリソースからの応答を受け取ります。

GetResponse メソッドが呼び出されたら、プロパティはすべて読み取り専用であると見なす必要があります。WebRequest インスタンスは、1 回しか使用できません。別の要求を行う場合は、WebRequest を新たに作成する必要があります。

GetResponse メソッドは、着信応答を格納するための適切な WebResponse 子孫を作成します。

参照

関連項目

WebRequest クラス
HttpWebRequest クラス
FileWebRequest クラス

概念

プラグ可能なプロトコルのプログラミング
WebResponse からの派生