Visual Studio での Windows Communication Foundation サービスと WCF データ サービス
Visual Studio では、分散型アプリケーションを作成するための Microsoft テクノロジである Windows Communication Foundation (WCF) と WCF Data Services で作業するためのツールを提供します。 このトピックでは、Visual Studio の観点から、これらのサービスの概要を説明します。 完全なドキュメントについては、「WCF Data Services 4.5」を参照してください。
WCF とは
Windows Communication Foundation (WCF) は、セキュリティで保護され、信頼性が高く、トランザクションに対応し、相互運用可能な分散型アプリケーションを作成するための統合フレームワークです。 これは、ASMX Web サービス、.NET リモート処理、エンタープライズ サービス (分散コンポーネント オブジェクト モデル (DCOM))、Microsoft メッセージ キュー (MSMQ) などの古いプロセス間通信テクノロジに代わるものです。 WCF により、これらのすべてのテクノロジの機能が統一プログラミング モデルの下に統合され、 分散型アプリケーションの開発エクスペリエンスが簡素化されます。
WCF Data Services とは
WCF Data Services は、Open Data (Open Data Protocol (OData)) Protocol 標準の実装です。 WCF Data Services では、表形式データが一連の REST API として公開されるため、GET、POST、PUT、DELETE などの標準的な HTTP 動詞を使用してデータを返すことができます。 サーバー側では、新しい OData サービスを作成するための ASP.NET Web API によって WCF Data Services が置き換えられます。 WCF Data Services クライアント ライブラリは引き続き、Visual Studio ([プロジェクト]>[サービス参照の追加]) から .NET アプリケーションの OData サービスを使用するのに適しています。 詳細については、「WCF Data Services 4.5」を参照してください。
WCF プログラミング モデル
WCF プログラミング モデルは、2 つのエンティティ (WCF サービスと WCF クライアント) 間の通信に基づきます。 このプログラミング モデルは、.NET の System.ServiceModel 名前空間にカプセル化されます。
WCF サービス
WCF サービスは、サービスとクライアント間のコントラクトを定義するインターフェイスに基づきます。 次のコードに示すように、これは、ServiceContractAttribute 属性でマークされます。
WCF サービスによって公開される関数またはメソッドは、OperationContractAttribute 属性でマークすることによって定義します。
さらに、複合型を DataContractAttribute 属性でマークすると、シリアル化されたデータを公開することもできます。 これにより、クライアント内でデータ バインディングが可能になります。
インターフェイスとそのメソッドを定義すると、それらは、インターフェイスを実装するクラスにカプセル化されます。 単一の WCF サービス クラスで複数のサービス コントラクトを実装できます。
WCF サービスは、"エンドポイント" と呼ばれるものを介して使用するために公開されます。 エンドポイントは、このサービスと通信できる唯一の方法です。他のクラスの場合のように、直接参照を介してサービスにアクセスすることはできません。
エンドポイントは、アドレス、バインド、コントラクトで構成されます。 アドレスでは、サービスが配置されている場所を定義します。これは、URL、ファイル転送プロトコル (FTP) アドレス、ネットワークまたはローカル パスを指定できます。 バインドは、サービスとの通信方法を定義します。 WCF バインドでは、プロトコル (HTTP、FTP など)、のセキュリティ メカニズム (Windows 認証、ユーザー名とパスワードなど) などを指定するための汎用性のあるモデルを提供します。 コントラクトには、WCF サービス クラスによって公開される操作が含まれます。
単一の WCF サービスについて複数のエンドポイントを公開できます。 これにより、さまざまなクライアントが、異なる方法で同じサービスと通信できるようになります。 たとえば、バンキング サービスでは、あるエンドポイントを従業員に、別のエンドポイントを外部の顧客に提供し、それぞれが異なるアドレス、バインド、またはコントラクトを使用するようにすることができます。
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 サービス ライブラリ プロジェクト、WCF サービス Web サイト、WCF サービス項目テンプレートが含まれます。
テンプレートを選択すると、サービス コントラクト、サービス実装、サービス構成用のファイルが追加されます。 必要なすべての属性が既に追加され、単純な "Hello World" 型のサービスが作成されているため、コードを記述する必要はありません。 もちろん、実際のサービスの関数とメソッドを提供するコードを追加する必要はありますが、テンプレートによって基本的なひな型が提供されます。
WCF テンプレートの詳細については、「WCF Visual Studio テンプレート」を参照してください。
WCF サービス ホスト
WCF サービス プロジェクトの Visual Studio デバッガーを起動すると (F5 キーを押す)、WCF サービス ホスト ツールが自動的に起動し、サービスをローカルでホストします。 WCF サービス ホストでは、サービス プロジェクト内のサービスを列挙し、プロジェクトの構成を読み込んで、検出した各サービスのためのホストをインスタンス化します。
WCF サービス ホストを使用すると、追加のコードを記述したり、開発時に特定のホストにコミットしたりすることなく、WCF サービスをテストできます。
WCF サービス ホストの詳細については、「WCF サービス ホスト (WcfSvcHost.exe)」を参照してください。
WCF テスト クライアント
WCF テスト クライアント ツールを使用すると、テスト パラメーターを入力し、その入力を WCF サービスに送信し、サービスから返される応答を表示できます。 これを WCF サービス ホストと組み合わせると、便利なサービス テスト エクスペリエンスが提供されます。 ツールは、%ProgramFiles(x86)%\Microsoft Visual Studio\2017\Enterprise\Common7\IDE フォルダー内にあります。
F5 キーを押して WCF サービス プロジェクトをデバッグすると、WCF テスト クライアントが開いて、構成ファイルで定義されているサービス エンドポイントの一覧が表示されます。 ユーザーは、パラメーターをテストしてサービスを起動することができ、このプロセスを繰り返して、サービスのテストおよび検証を継続的に行うことができます。
WCF テスト クライアントの詳細については、「WCF のテスト用クライアント (WcfTestClient.exe)」を参照してください。
Visual Studio での WCF サービスへのアクセス
Visual Studio では、WCF クライアントを作成するタスクが簡素化され、[サービス参照の追加] ダイアログ ボックスを使用して追加するサービスのプロキシとエンドポイントが自動的に生成されます。 必要なすべての構成情報が app.config ファイルに追加されます。 ほとんどの場合、サービスを使用するには、それをインスタンス化するだけで済みます。
[サービス参照の追加] ダイアログ ボックスを使用すると、サービスのアドレスを入力したり、ソリューションで定義されたサービスを検索したりすることができます。 このダイアログ ボックスでは、サービスの一覧と、それらのサービスによって提供される操作が返されます。 また、これを使用すると、コードでサービスを参照する名前空間を定義することもできます。
[サービス参照の構成] ダイアログ ボックスでは、サービスの構成をカスタマイズできます。 サービスのアドレスの変更、アクセス レベル、非同期動作、およびメッセージ コントラクト型の指定、型の再利用の構成を行うことができます。
サービス エンドポイントを選択する
一部の Windows Communication Foundation (WCF) サービスでは、クライアントでサービスとの通信に使用される複数のエンドポイントを公開します。 たとえば、あるサービスでは、HTTP バインドとユーザー名およびパスワードのセキュリティを使用するエンドポイントと、FTP と Windows 認証を使用する 2 番目のエンドポイントを公開するとしましょう。 最初のエンドポイントは、ファイアウォールの外部からサービスにアクセスするアプリケーションによって使用され、2 番目は、イントラネット上で使用されます。
このような場合、サービス参照のコンストラクターのパラメーターとして、endpointConfigurationName
を指定できます。
Note
この記事で紹介する Visual Studio ユーザー インターフェイス要素の一部は、お使いのコンピューターでは名前や場所が異なる場合があります。 Visual Studio のエディションや環境設定がお使いのものと異なる場合があります。 詳細については、「Visual Studio IDE のカスタマイズ」を参照してください。
サービス エンドポイントを選択する
ソリューション エクスプローラー でプロジェクト ノードを右クリックし、[サービス参照の追加] を選択して、WCF サービスへの参照を追加します。
コード エディターで、サービス参照のコンストラクターを追加します。
Note
ServiceReference をサービス参照の名前空間に置き換え、Service1Client をサービスの名前に置き換えます。
IntelliSense の一覧には、コンストラクターのオーバーロードが含まれます。
endpointConfigurationName As String
オーバーロードを選択します。オーバーロードの後に、「
=
ConfigurationName」と入力します。ここで、ConfigurationName は、使用するエンドポイントの名前です。Note
使用可能なエンドポイントの名前がわからない場合は、app.config ファイルで見つけることができます。
WCF サービスに使用できるエンドポイントを見つける
ソリューション エクスプローラーで、サービス参照を含むプロジェクトの app.config ファイルを右クリックし、[開く] を選択します。 コード エディターにファイルが表示されます。
ファイル内で
<Client>
タグを検索します。<Client>
タグの下で、<Endpoint>
から始まるタグを検索します。サービス参照で複数のエンドポイントが提供される場合、2 つ以上の
<Endpoint
タグがあります。<EndPoint>
タグ内で、name="
SomeService"
パラメーター (ここで、SomeService はエンドポイント名を表します) を探します。 これは、サービス参照のコンストラクターのendpointConfigurationName As String
オーバーロードに渡すことができるエンドポイントの名前です。
サービス メソッドを非同期に呼び出す
Windows Communication Foundation (WCF) サービスのほとんどのメソッドは、同期または非同期のいずれかで呼び出すことができます。 メソッドを非同期に呼び出すことにより、アプリケーションは、低速接続で動作している場合、メソッドを呼び出している間も動作を継続することができます。
既定では、サービス参照がプロジェクトに追加されたときに、メソッドを同期的に呼び出すように構成されます。 メソッドを非同期に呼び出すように動作を変更するには、[サービス参照の構成] ダイアログ ボックスで設定を変更します。
Note
このオプションは、サービスごとに設定します。 サービスの 1 つのメソッドが非同期に呼び出される場合、すべてのメソッドを非同期に呼び出す必要があります。
Note
この記事で紹介する Visual Studio ユーザー インターフェイス要素の一部は、お使いのコンピューターでは名前や場所が異なる場合があります。 Visual Studio のエディションや環境設定がお使いのものと異なる場合があります。 詳細については、「Visual Studio IDE のカスタマイズ」を参照してください。
サービス メソッドを非同期に呼び出す
ソリューション エクスプローラーで、サービス参照を選択します。
[プロジェクト] メニューで、[サービス参照の構成] をクリックします。
[サービス参照の構成] ダイアログ ボックスで、[非同期操作の生成] チェックボックスをオンにします。
サービスから返されたデータをバインドする
他のデータソースをコントロールにバインドする場合と同様に、Windows Communication Foundation (WCF) サービスから返されたデータをコントロールにバインドすることができます。 WCF サービスへの参照を追加すると、データを返す複合型がサービスに含まれている場合、それらは自動的に [データ ソース] ウィンドウに追加されます。
WCF サービスから返された単一のデータ フィールドにコントロールをバインドする
[データ] メニューの [データ ソースの表示]をクリックします。
[データ ソース] ウィンドウが表示されます。
[データ ソース] ウィンドウで、サービス参照のノードを展開します。 サービスから返された複合型が表示されます。
型のノードを展開します。 その型のデータ フィールドが表示されます。
フィールドを選択し、ドロップダウン リストの矢印をクリックして、そのデータ型に使用できるコントロールの一覧を表示します。
バインド先のコントロールの型をクリックします。
フィールドをフォームにドラッグします。 コントロールが、BindingSource コンポーネントおよび BindingNavigator コンポーネントと共にフォームに追加されます。
バインドする他のフィールドについて、手順 4 から 6 を繰り返します。
WCF サービスから返される複合型にコントロールをバインドする
[データ] メニューで、 [データ ソースの表示] を選択します。 [データ ソース] ウィンドウが表示されます。
[データ ソース] ウィンドウで、サービス参照のノードを展開します。 サービスから返された複合型が表示されます。
型のノードを選択し、ドロップダウン リストの矢印をクリックして、使用可能なオプションの一覧を表示します。
[DataGridView] をクリックしてグリッドにデータを表示するか、[詳細] をクリックして、個々のコントロールにデータを表示します。
ノードをフォームにドラッグします。 コントロールが、BindingSource コンポーネントおよび BindingNavigator コンポーネントと共にフォームに追加されます。
既存の型を再利用するようにサービスを構成する
サービス参照をプロジェクトに追加すると、サービスで定義されている型がローカル プロジェクトに生成されます。 多くの場合、これにより、サービスが共通の .NET 型を使用する場合、または型が共有ライブラリで定義されている場合は、重複する型が作成されます。
この問題を回避するには、既定により、参照されたアセンブリ内の型を共有します。 1 つ以上のアセンブリに対して型の共有を無効にする必要がある場合は、[サービス参照の構成] ダイアログ ボックスで無効にすることができます。
単一のアセンブリで型の共有を無効にする
ソリューション エクスプローラーで、サービス参照を選択します。
[プロジェクト] メニューで、[サービス参照の構成] をクリックします。
[サービス参照の構成] ダイアログ ボックスで、[参照されたアセンブリを指定して型を再利用] を選択します。
型の共有を有効にする各アセンブリのチェックボックスをオンにします。 アセンブリに対して型の共有を無効にするには、チェックボックスをオフのままにします。
すべてのアセンブリで型の共有を無効にする
ソリューション エクスプローラーで、サービス参照を選択します。
[プロジェクト] メニューで、[サービス参照の構成] をクリックします。
[サービス参照の構成] ダイアログ ボックスで、[参照されたアセンブリで型を再利用] チェックボックスをオフにします。
関連トピック
Title | 説明 |
---|---|
チュートリアル : Windows フォームでの簡単な WCF サービスの作成 | Visual Studio で WCF サービスを作成して使用する例をステップバイステップで説明します。 |
チュートリアル: WPF と Entity Framework を使用した WCF データ サービスの作成 | Visual Studio で WCF Data Services を作成して使用する方法をステップバイステップで説明します。 |
WCF 開発ツールの使用 | Visual Studio で WCF サービスを作成してテストする方法を説明します。 |
方法: WCF データ サービス参照を追加、更新、または削除する | |
サービス参照のトラブルシューティング | サービス参照で発生する化膿性のある一般的なエラーとそれを防ぐ方法について説明します。 |
WCF サービスのデバッグ | WCF サービスのデバッグ時に発生する可能性のある一般的なデバッグ問題と手法について説明します。 |
チュートリアル: n 層データ アプリケーションの作成 | 型指定されたデータセットを作成し、TableAdapter とデータセット コードを複数のプロジェクトに分離する手順について説明します。 |
[サービス参照の構成] ダイアログ ボックス | [サービス参照の構成] のユーザー インターフェイス要素について説明します。 |