次の方法で共有


Visual Studio の Windows Communication Foundation Services と WCF Data Services

Visual Studio には、分散アプリケーションを作成するための Microsoft テクノロジである Windows Communication Foundation (WCF) と WCF Data Services を操作するためのツールが用意されています。 この記事では、Visual Studio の観点からサービスの概要について説明します。 完全なドキュメントについては、 WCF Data Services 4.5 を参照してください。

Windows Communication Foundation (WCF) は、セキュリティで保護され、信頼性が高く、トランザクションが行われ、相互運用可能な分散アプリケーションを作成するための統合フレームワークです。 ASMX Web サービス、.NET リモート処理、エンタープライズ サービス (分散コンポーネント オブジェクト モデル (DCOM))、Microsoft メッセージ キュー (MSMQ) などの古いプロセス間通信テクノロジに代わるものです。 WCF は、これらすべてのテクノロジの機能を統合されたプログラミング モデルの下にまとめます。 この方法により、分散アプリケーションを開発するエクスペリエンスが簡略化されます。

WCF Data Services

WCF Data Services は、Open Data (Open Data Protocol (OData)) プロトコル標準の実装です。 WCF Data Services を使用すると、表形式データを一連の REST API として公開できます。これにより、 GETPOSTPUTDELETEなどの標準の HTTP コマンドを使用してデータを返すことができます。 サーバー側では、 ASP.NET Web API は、新しい OData サービスを作成するための WCF Data Services よりも優先されます。 WCF Data Services クライアント ライブラリは、引き続き Visual Studio (Project>Add Service Reference) から .NET アプリケーションで OData サービスを使用する場合に適した選択肢です。 詳細については、「 WCF Data Services 4.5」を参照してください。

WCF プログラミング モデル

WCF プログラミング モデルは、WCF サービスと WCF クライアントの 2 つのエンティティ間の通信に基づいています。 プログラミング モデルは、.NET の System.ServiceModel 名前空間にカプセル化されています。

WCF サービス

WCF サービスは、サービスとクライアントの間のコントラクトを定義するインターフェイスに基づいています。 サービスは、次のコードに示すように、 ServiceContractAttribute 属性でマークされます。

[ServiceContract]
public interface IService1

WCF サービスによって公開される関数またはメソッドは、 OperationContractAttribute 属性でマークすることで定義します。

[OperationContract]
string GetData(string value);

また、複合型を DataContractAttribute 属性でマークすることで、シリアル化されたデータを公開することもできます。これにより、クライアントでのデータ バインディングが可能になります。

インターフェイスとそのメソッドが定義されると、インターフェイスを実装するクラスにカプセル化されます。 1 つの WCF サービス クラスで複数のサービス コントラクトを実装できます。

WCF サービスは、 エンドポイントと呼ばれるものを介して使用するために公開されます。 エンドポイントは、サービスと通信する唯一の方法を提供します。 他のクラスと同様に、直接参照を介してサービスにアクセスすることはできません。

エンドポイントは、アドレス、バインディング、およびコントラクトで構成されます。 アドレスは、URL、ファイル転送プロトコル (FTP) アドレス、ネットワークまたはローカル パスなど、サービスが配置される場所を定義します。 バインディングは、サービスとの通信方法を定義します。 WCF バインドは、Windows 認証やユーザー名やパスワードなどのセキュリティ メカニズムを使用して HTTP や FTP などのプロトコルを指定するための汎用性の高いモデルを提供します。 コントラクトには、WCF サービス クラスによって公開される操作が含まれます。

1 つの WCF サービスに対して複数のエンドポイントを公開できます。 この方法により、異なるクライアントが同じサービスと異なる方法で通信できるようになります。 たとえば、銀行サービスは、従業員用に 1 つのエンドポイントを提供し、別のエンドポイントを外部の顧客に提供し、それぞれが異なる住所、バインディング、または契約を使用する場合があります。

WCF クライアント

WCF クライアントは、アプリケーションが WCF サービスと通信できるようにする プロキシ と、サービスに対して定義されたエンドポイントと一致するエンドポイントで構成されます。 プロキシは 、app.config ファイル内のクライアント側で生成され、サービスによって公開される型とメソッドに関する情報が含まれます。 複数のエンドポイントを公開するサービスの場合、クライアントは、HTTP 経由で通信し、Windows 認証を使用するなど、ニーズに最も適したものを選択できます。

WCF クライアントが作成されたら、他のオブジェクトと同様に、コード内のサービスを参照します。 たとえば、前に示した GetData メソッドを呼び出すには、次の例のようなコードを記述します。

private void button1_Click(System.Object sender, System.EventArgs e)
{
    ServiceReference1.Service1Client client = new
        ServiceReference1.Service1Client();
    string returnString;

    returnString = client.GetData(textBox1.Text);
    label1.Text = returnString;
}

Visual Studio の WCF ツール

Visual Studio には、WCF サービスと WCF クライアントの両方を作成するのに役立つツールが用意されています。 詳細については、「 チュートリアル: Windows フォームでの単純な WCF サービスの作成」を参照してください。

WCF サービスの作成とテスト

WCF Visual Studio テンプレートを基盤として使用して、独自のサービスをすばやく作成できます。 その後、WCF サービス自動ホストと WCF テスト クライアントを使用して、サービスをデバッグおよびテストできます。 これらのツールは、迅速かつ便利なデバッグとテスト サイクルを提供し、早期にホスティング モデルにコミットする必要がなくなります。

WCF テンプレート

WCF Visual Studio テンプレートは、サービス開発のための基本的なクラス構造を提供します。 WCF サービス ライブラリ プロジェクト、WCF サービス Web サイト、WCF サービス項目テンプレートなど、いくつかの WCF テンプレートを [新しいプロジェクトの追加] ダイアログで使用できます。

テンプレートを選択すると、サービス コントラクト、サービス実装、およびサービス構成のファイルが追加されます。 必要なすべての属性が既に追加されており、単純な "Hello World" タイプのサービスが作成されており、コードを記述する必要はありませんでした。 実際のサービスに関数とメソッドを提供するコードを追加できますが、テンプレートは基本的な基盤を提供します。

詳細については、「 WCF Visual Studio テンプレート」を参照してください。

WCF サービス ホスト

WCF サービス プロジェクトの Visual Studio デバッガーを ( F5 キーを押して) 起動すると、WCF サービス ホスト ツールが自動的に開始され、サービスがローカルでホストされます。 このツールは、WCF サービス プロジェクト内のサービスを列挙し、プロジェクトの構成を読み込み、検索する各サービスのホストをインスタンス化します。

このツールは、開発時に追加のコードを記述したり、特定のホストにコミットしたりすることなく、WCF サービスをテストするのに役立ちます。 詳細については、「 WCF サービス ホスト (WcfSvcHost.exe)」を参照してください。

WCF テスト クライアント

WCF テスト クライアント ツールを使用すると、テスト パラメーターの入力、WCF サービスへの入力の送信、サービスからの応答の表示を行うことができます。 このツールは、WCF サービス ホストと組み合わせると便利なサービス テスト エクスペリエンスを提供します。 ツールの場所は、Visual Studio インストール フォルダーの下の Common7\IDE です。

F5 キーを押して WCF サービス プロジェクトをデバッグすると、WCF テスト クライアントが開き、構成ファイルで定義されているサービス エンドポイントの一覧が表示されます。 パラメーターをテストしてサービスを開始し、このプロセスを繰り返して、サービスを継続的にテストおよび検証できます。 詳細については、「 WCF テスト クライアント (WcfTestClient.exe)」を参照してください。

Visual Studio で WCF サービスにアクセスする

Visual Studio では、[ サービス参照の追加 ] ダイアログで追加するサービスのプロキシとエンドポイントを自動的に生成することで、WCF クライアントを作成するタスクが簡略化されます。 必要なすべての構成情報が app.config ファイルに追加されます。 ほとんどの場合、サービスをインスタンス化して使用を開始する必要があります。

[ サービス参照の追加 ] ダイアログで、サービスのアドレスを指定するか、ソリューションで定義されているサービスを検索します。 システムは、サービスとサービスによって提供される操作の一覧を返します。 コードでサービスを参照するための名前空間を定義することもできます。

[ サービス参照の構成 ] ダイアログで、サービスの構成をカスタマイズします。 サービスのアドレスを変更したり、アクセス レベル、非同期動作、メッセージ コントラクト型を指定したり、型の再利用を構成したりできます。

サービス エンドポイント

一部の WCF サービスでは、クライアントがサービスと通信できる複数のエンドポイントが公開されます。 サービスは、ユーザー名とパスワードのセキュリティを持つ HTTP バインディングを使用する 1 つのエンドポイントと、Windows 認証で FTP を使用する 2 つ目のエンドポイントを公開する場合があります。 最初のエンドポイントは、ファイアウォールの外部からサービスにアクセスするためにアプリケーションによって使用されますが、2 番目のエンドポイントはイントラネットで使用できます。

このシナリオでは、サービス参照のコンストラクターで endpointConfigurationName パラメーターを指定します。

この記事の手順では、Visual Studio で使用できる対話型開発エクスペリエンス (IDE) の最新バージョンについて説明します。 コンピューターには、一部のユーザー インターフェイス要素に対して異なる名前または場所が表示される場合があります。 別のバージョンの Visual Studio または異なる環境設定を使用している可能性があります。 詳細については、「IDEのカスタマイズ」を参照してください。

サービス エンドポイントの選択

次の手順に従って、サービス エンドポイントを選択します。

  1. ソリューション エクスプローラーでプロジェクト ノードを右クリックし、[サービス参照の追加] を選択して、WCF サービスへの参照を追加します。

  2. コード エディターで、サービス参照のコンストラクターを追加します。 ServiceReferenceをサービス参照の名前空間に置き換え、Service1Clientをサービスの名前に置き換えます。

    ServiceReference.Service1Client proxy = new ServiceReference.Service1Client(
    

  1. コードを入力すると、コンストラクターのオーバーロードを含む IntelliSense リストが表示されます。 endpointConfigurationName As String オーバーロードを選択します。

  2. オーバーロードを選択したら、「 ="<ServiceEndpoint>"」と入力します。ここで、 <ServiceEndpoint> は使用するエンドポイント サービスの名前です。

    ヒント

    使用可能なエンドポイントの名前は、 app.config ファイルで定義されます。

WCF サービスで使用可能なエンドポイントを検索する

WCF サービスで使用可能なエンドポイントを見つけるには、次の手順に従います。

  1. ソリューション エクスプローラーで、サービス参照を含むプロジェクトの app.config ファイルを右クリックし、[開く] を選択します。 コード エディターでファイルが開きます。

  2. ファイル内の <Client> タグを検索します。

  3. [ <Client> タグ] セクションで、 <Endpoint>で始まる入れ子になったタグを検索します。

    サービス参照が複数のエンドポイントを提供する場合、2 つ以上の <Endpoint> タグがあります。

  4. <EndPoint> タグ定義で、name="<ServiceEndpoint>" パラメーターを見つけます (ここで、<ServiceEndpoint>はサービスのエンドポイント名を表します)。 この値は、サービス参照のコンストラクターの endpointConfigurationName As String オーバーロードに渡すことができるサービス エンドポイントの名前です。

サービス メソッドを非同期的に呼び出す

WCF サービスのほとんどのメソッドは、同期的または非同期的に呼び出すことができます。 メソッドを非同期で呼び出すと、メソッドが呼び出されている間もアプリケーションは引き続き動作します。 この方法は、システムが低速接続で動作する場合に便利です。

サービス参照がプロジェクトに追加されると、既定の構成ではメソッドが同期的に呼び出されます。 動作を変更して、 サービス参照の構成 ダイアログでメソッドを非同期的に呼び出すことができます。

このオプションは 、サービスごとに 設定されます。 サービスの 1 つのメソッドを非同期的に呼び出す場合は、すべてのメソッドを非同期的に呼び出す必要があります。

この記事の手順では、Visual Studio で使用できる対話型開発エクスペリエンス (IDE) の最新バージョンについて説明します。 コンピューターには、一部のユーザー インターフェイス要素に対して異なる名前または場所が表示される場合があります。 別のバージョンの Visual Studio または異なる環境設定を使用している可能性があります。 詳細については、「IDEのカスタマイズ」を参照してください。

メソッドを非同期的に呼び出す

サービス メソッドを非同期的に呼び出すには、次の手順に従います。

  1. ソリューション エクスプローラーで、サービス参照を選択します。

  2. プロジェクト>サービス参照の構成を選択します。

  3. [ サービス参照の構成 ] ダイアログで、[ 非同期操作の生成 ] チェック ボックスをオンにします。

サービスによって返されるデータをバインドする

他のデータ ソースをコントロールにバインドする場合と同様に、WCF サービスによって返されるデータをコントロールにバインドできます。 WCF サービスへの参照を追加すると、サービスにデータを返す複合型が含まれている場合は、[ データ ソース] ウィンドウに自動的に追加されます。

WCF サービスによって返されるデータ フィールドにコントロールをバインドする

WCF サービスによって返される単一のデータ フィールドにコントロールをバインドするには、次の手順を使用します。

  1. [データ]>[データ ソースの表示]を選択します。 [ データ ソース] ウィンドウが開きます。

  2. [ データ ソース] ウィンドウで、サービス参照のノードを展開します。 サービスによって返されるすべての複合型が表示されます。

  3. 型ノードを展開し、その型のデータ フィールドを表示します。

  4. フィールドを選択し、ドロップダウン リストを展開して、データ型に使用できるコントロールの一覧を表示します。

  5. バインドするコントロールの種類を選択します。

  6. フィールドをフォームにドラッグします。 コントロールは、 BindingSource コンポーネントと BindingNavigator コンポーネントと共にフォームに追加されます。

  7. 手順 4 から 6 を繰り返し、他のフィールドをバインドします。

WCF サービスによって返される複合型にコントロールをバインドする

WCF サービスによって返される複合型にコントロールをバインドするには、次の手順に従います。

  1. [データ]>[データ ソースの表示]を選択します。 [ データ ソース] ウィンドウが開きます。

  2. [ データ ソース] ウィンドウで、サービス参照のノードを展開します。 サービスによって返されるすべての複合型が表示されます。

  3. 種類のノードを選択し、ドロップダウン リストを展開して、使用可能なオプションの一覧を表示します。

  4. DataGridView を選択してグリッド内のデータを表示するか、[詳細] を選択し、個々のコントロールを使用してデータを表示します。

  5. ノードをフォームにドラッグします。 コントロールは、 BindingSource コンポーネントと BindingNavigator コンポーネントと共にフォームに追加されます。

既存の型を再利用するようにサービスを構成する

サービス参照がプロジェクトに追加されると、サービスで定義されているすべての型がローカル プロジェクトで生成されます。 多くの場合、この方法では、サービスで共通の .NET 型を使用する場合、または共有ライブラリで型が定義されている場合に、重複する型が作成されます。

この問題を回避するために、参照されるアセンブリ内の型は既定で共有されます。 1 つ以上のアセンブリの型共有を無効にする場合は、[ サービス参照の構成 ] ダイアログで設定を変更します。

1 つのアセンブリで型共有を無効にする

次の手順に従って、1 つのアセンブリで型共有を無効にすることができます。

  1. ソリューション エクスプローラーで、サービス参照を選択します。

  2. プロジェクト>サービス参照の構成を選択します。

  3. [ サービス参照の構成 ] ダイアログで、[ 指定した参照アセンブリで型を再利用 する] チェック ボックスをオンにします。

  4. 型共有を有効にする各アセンブリのチェック ボックスをオンにします。 アセンブリの型共有を無効にするには、チェック ボックスをオフのままにします。

すべてのアセンブリで型共有を無効にする

次の手順を使用して、すべてのアセンブリで型共有を無効にすることもできます。

  1. ソリューション エクスプローラーで、サービス参照を選択します。

  2. プロジェクト>サービス参照の構成を選択します。

  3. [ サービス参照の構成 ] ダイアログで、[ 参照されるアセンブリで型を再利用 する] チェック ボックスをオフにします。

同様の概念を調べる

次の記事では、WCF サービスと WCF データ サービスに関連する概念と手順について説明します。

タイトル 説明
チュートリアル: Windows フォームで基本的な WCF サービスを作成する Visual Studio での WCF サービスの作成と使用の詳細なデモを提供します。
チュートリアル: WPF と Entity Framework を使用して WCF データ サービスを作成する Visual Studio で WCF Data Services を作成して使用する方法の詳細なデモを提供します。
WCF 開発ツールを使用する Visual Studio で WCF サービスを作成してテストする方法について説明します。
方法: WCF データ サービス参照を追加、更新、または削除する [サービス参照の追加] ダイアログを使用して、ソリューション内の WCF Data Services を検索する方法について説明します。
サービス参照をトラブルシューティングする サービス参照で発生する可能性のある一般的なエラーとその回避方法を示します。
WCF サービスのデバッグ WCF サービスのデバッグ時に発生する可能性がある一般的なデバッグの問題と手法について説明します。
チュートリアル: n 層データ アプリケーションを作成する 型指定されたデータセットを作成し、TableAdapter とデータセット コードを複数のプロジェクトに分割する手順について説明します。
[サービス参照の構成] ダイアログを確認する [ サービス参照の構成 ] ダイアログのユーザー インターフェイス要素について説明します。