次の方法で共有


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 を参照してください。

WCF とは

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 として公開できるため、GET、POST、PUT、DELETE などの標準の HTTP 動詞を使用してデータを返すことができます。 サーバー側では、WCF Data Services は、新しい OData サービスを作成するための ASP.NET Web API によって置き換えられます。 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 バインドは、HTTP や FTP などのプロトコル、Windows 認証やユーザー名やパスワードなどのセキュリティ メカニズムなどを指定するための汎用性の高いモデルを提供します。 コントラクトには、WCF サービス クラスによって公開される操作が含まれます。

1 つの WCF サービスに対して複数のエンドポイントを公開できます。 これにより、異なるクライアントが異なる方法で同じサービスと通信できるようになります。 たとえば、銀行サービスでは、従業員に 1 つのエンドポイントを提供し、もう 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 サービス ライブラリ プロジェクト、WCF サービス Web サイト、WCF サービス項目テンプレートが含まれます。

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

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

WCF サービス ホスト

WCF サービス プロジェクトの Visual Studio デバッガーを ( F5 キーを押して) 起動すると、WCF サービス ホスト ツールが自動的に開始され、サービスがローカルでホストされます。 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 バインディングとユーザー名とパスワードのセキュリティを使用する 1 つのエンドポイントと、FTP と Windows 認証を使用する 2 つ目のエンドポイントを公開する場合があります。 最初のエンドポイントは、ファイアウォールの外部からサービスにアクセスするアプリケーションによって使用される場合があります。一方、2 番目のエンドポイントはイントラネット上で使用される場合があります。

このような場合は、サービス参照のコンストラクターのパラメーターとして endpointConfigurationName を指定できます。

あなたのコンピューターでは、この記事中の Visual Studio のユーザーインターフェイス要素の名前や場所が異なる場合があります。 別のエディションの Visual Studio または異なる環境設定を使用している場合があります。 詳細については、「IDEのカスタマイズ」を参照してください。

サービス エンドポイントを選択するには

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

  2. コード エディターで、サービス参照のコンストラクターを追加します。

    ServiceReference.Service1Client proxy = new ServiceReference.Service1Client(
    

    ServiceReference をサービス参照の名前空間に置き換え、Service1Client をサービスの名前に置き換えます。

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

  4. オーバーロードの後に、「 =ConfigurationName」と入力します。 ConfigurationName は、使用するエンドポイントの名前です。

    使用可能なエンドポイントの名前がわからない場合は、 app.config ファイルで見つけることができます。

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

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

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

  3. <Client> タグの下で、<Endpoint>で始まるタグを検索します。

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

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

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

Windows Communication Foundation (WCF) サービスのほとんどのメソッドは、同期的または非同期的に呼び出される場合があります。 メソッドを非同期的に呼び出すと、低速の接続を介して動作するときにメソッドが呼び出されている間も、アプリケーションは引き続き動作できます。

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

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

あなたのコンピューターでは、この記事中の Visual Studio のユーザーインターフェイス要素の名前や場所が異なる場合があります。 別のエディションの Visual Studio または異なる環境設定を使用している場合があります。 詳細については、「IDEのカスタマイズ」を参照してください。

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

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

  2. [ プロジェクト ] メニューの [ サービス参照の構成] をクリックします。

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

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

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

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

  1. [ データ ] メニューの [ データ ソースの表示] をクリックします。

    [ データ ソース] ウィンドウが表示されます。

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

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

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

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

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

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

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

  1. [ データ ] メニューの [ データ ソースの表示] を選択します。 [ データ ソース] ウィンドウが表示されます。

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

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

  4. DataGridView をクリックしてグリッドにデータを表示するか、詳細をクリックして個々のコントロールにデータを表示します。

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

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

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

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

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

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

  2. [ プロジェクト ] メニューの [ サービス参照の構成] をクリックします。

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

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

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

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

  2. [ プロジェクト ] メニューの [ サービス参照の構成] をクリックします。

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

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

リファレンス

こちらも参照ください

  • .NET 用 Visual Studio データツール