完了までの時間: 30 分
チュートリアルのこの手順では、エコー アダプターの検索機能を実装します。 閲覧とは異なり、検索はオプションの機能です。 WCF LOB アダプター SDK によると、検索機能をサポートするには、 Microsoft.ServiceModel.Channels.Common.IMetadataSearchHandler
インターフェイスを実装する必要があります。 エコー アダプターの場合、アダプター開発ウィザードは、EchoAdapterMetadataSearchHandler という 1 つの派生クラスを自動的に生成します。
最初に EchoAdapterMetadataSearchHandler クラスを更新して、このインターフェイスを実装する方法、 Microsoft.ServiceModel.Channels.MetadataRetrievalNode
オブジェクトを設定する方法、およびアダプター サービス参照プラグインの追加ツールで検索結果がどのように表示されるかについて理解を深めます。
[前提条件]
この手順を開始する前に、「 手順 4: エコー アダプターのメタデータ参照ハンドラーを実装する」を完了します。 また、次のクラスについて明確に理解しておく必要があります。
Microsoft.ServiceModel.Channels.MetadataRetrievalNode
Microsoft.ServiceModel.Channels.Common.IMetadataSearchHandler
Microsoft.ServiceModel.Channels.MetadataRetrievalNodeDirections
IMetadataSearchHandler インターフェイス
Microsoft.ServiceModel.Channels.Common.IMetadataSearchHandler
は次のように定義されます。
public interface IMetadataSearchHandler : IConnectionHandler, IDisposable
{
MetadataRetrievalNode[] Search(string nodeId, string searchCriteria, int maxChildNodes, TimeSpan timeout);
}
Microsoft.ServiceModel.Channels.Common.IMetadataSearchHandler.Search%2A
メソッドは、検索条件に基づいてMicrosoft.ServiceModel.Channels.MetadataRetrievalNode
オブジェクトの配列を返します。 Search メソッドのパラメーター定義については、次の表で説明します。
パラメーター | 定義 |
---|---|
nodeId | 検索を開始するノード ID。 null または空の文字列 ("") の場合、操作はルート ノード ("/") から取得されます。 |
検索条件 | アダプター固有の検索条件。 検索条件が指定されていない場合、アダプターはすべてのノードを返す必要があります。 |
最大子ノード数 | 返される結果ノードの最大数。 Int32.Max を使用して、すべての結果ノードを取得します。 エコー アダプターではサポートされていません。 |
タイムアウト | 操作の完了に許容される最大時間。 エコー アダプターではサポートされていません。 |
検索結果の場合、アダプターはカテゴリ ノードまたは操作ノード、またはその両方を返すように選択できます。 アダプターがサポートする検索機能の種類に対応します。
エコー アダプターメタデータ検索
ターゲット システムのカテゴリと操作に応じて、返される Microsoft.ServiceModel.Channels.MetadataRetrievalNode
オブジェクトの配列を構築する方法は多数あります。 Echo アダプターが検索機能を実装する方法は、次の一覧のノード ID を使用してすべての操作を実行することです。
Echo/OnReceiveEcho, inbound operation
Echo/EchoStrings, outbound operation
Echo/EchoGreetings, outbound operation
Echo/EchoGreetingFromFile, outbound operation
ノード ID が検索条件と一致する場合は、操作のノード ID を使用して
Microsoft.ServiceModel.Channels.MetadataRetrievalNode
オブジェクトを作成し、プロパティに値を割り当てます。 たとえば、MetadataRetrievalNode nodeInbound = new MetadataRetrievalNode("Echo/OnReceiveEcho"); //create the MetadataRetrievalNode using the operation's node ID. nodeInbound.DisplayName = "OnReceiveEcho"; //The Display Name shown in the Name column of the Add Adapter Service Reference Visual Studio Plug-in nodeInbound.Description = "This operation echoes the ___location and length of a file dropped in the specified file system."; //The Description shown as the tool tip in the Add Adapter Service Visual Studio Plug-in nodeInbound.Direction = MetadataRetrievalNodeDirections.Inbound; //It is an inbound operation nodeInbound.IsOperation = true; //It is an operation, not category.
次に、
Microsoft.ServiceModel.Channels.MetadataRetrievalNode
のコレクションにオブジェクトを追加します。たとえば、resultList.Add(nodeInbound);
最後に配列形式でコレクションを返します。
return resultList.ToArray();
アダプター サービス リファレンス プラグインの追加とアダプター サービス アドインツールを使用して、利用可能な操作を接続ベースで検索することができます。 たとえば、次の図は、検索条件が文字列 Greeting の場合、 検索で EchoGreetings および EchoGreetingFromFile 操作が返されることを示しています。
一致するものが見つからない場合、いずれかのツールは次の図に示すエラー メッセージを返します。
IMetadataSearchHandler の実装
Microsoft.ServiceModel.Channels.Common.IMetadataSearchHandler
インターフェイスのMicrosoft.ServiceModel.Channels.Common.IMetadataSearchHandler.Search%2A
メソッドを実装します。 操作の表示名が検索条件と一致する場合は、その操作の Microsoft.ServiceModel.Channels.MetadataRetrievalNode
オブジェクトを作成し、そのオブジェクトを Microsoft.ServiceModel.Channels.MetadataRetrievalNode
オブジェクトの配列に追加します。
EchoAdapterMetadataSearchHandler クラスを更新するには
ソリューション エクスプローラーで、 EchoAdapterMetadataSearchHandler.cs ファイルをダブルクリックします。
Visual Studio エディターの Search メソッド内で、既存のロジックを次のように置き換えます。 このロジックは、Echo/OnReceiveEcho が指定した検索条件と一致する場合に、
Microsoft.ServiceModel.Channels.MetadataRetrievalNode
オブジェクトを作成します。List<MetadataRetrievalNode> resultList = new List<MetadataRetrievalNode>(); if ("OnReceiveEcho".ToLower().Contains(searchCriteria.ToLower())) { MetadataRetrievalNode nodeInbound = new MetadataRetrievalNode("Echo/OnReceiveEcho"); nodeInbound.DisplayName = "OnReceiveEcho"; nodeInbound.Description = "This operation echoes the ___location and length of a file dropped in the specified file system."; nodeInbound.Direction = MetadataRetrievalNodeDirections.Inbound; nodeInbound.IsOperation = true; resultList.Add(nodeInbound); }
Echo/EchoStrings が指定した検索条件と一致する場合は、次のロジックを追加して
Microsoft.ServiceModel.Channels.MetadataRetrievalNode
オブジェクトを作成します。if ("EchoStrings".ToLower().Contains(searchCriteria.ToLower())) { MetadataRetrievalNode outOpNode1 = new MetadataRetrievalNode("Echo/EchoStrings"); outOpNode1.DisplayName = "EchoStrings"; outOpNode1.Description = "This operation echoes the incoming string COUNT number of times in a string array."; outOpNode1.Direction = MetadataRetrievalNodeDirections.Outbound; outOpNode1.IsOperation = true; resultList.Add(outOpNode1); }
Echo/EchoGreetings が指定した検索条件と一致する場合は、次のロジックを追加して
Microsoft.ServiceModel.Channels.MetadataRetrievalNode
オブジェクトを作成します。if ("EchoGreetings".ToLower().Contains(searchCriteria.ToLower())) { MetadataRetrievalNode outOpNode2 = new MetadataRetrievalNode("Echo/EchoGreetings"); outOpNode2.DisplayName = "EchoGreetings"; outOpNode2.Description = "This operation echoes the incoming Greeting object COUNT number of times in an array of type Greeting."; outOpNode2.Direction = MetadataRetrievalNodeDirections.Outbound; outOpNode2.IsOperation = true; resultList.Add(outOpNode2); }
Echo/EchoGreetingFromFile が指定した検索条件と一致する場合は、次のコードを追加して
Microsoft.ServiceModel.Channels.MetadataRetrievalNode
オブジェクトを作成します。if ("EchoCustomGreetingFromFile".ToLower().Contains(searchCriteria.ToLower())) { MetadataRetrievalNode outOpNode3 = new MetadataRetrievalNode("Echo/EchoCustomGreetingFromFile"); outOpNode3.DisplayName = "EchoCustomGreetingFromFile"; outOpNode3.Description = "This operation echoes the greeting object by reading its instance from a file. The Greeting object's metadata is obtained from a predefined XSD file."; outOpNode3.Direction = MetadataRetrievalNodeDirections.Outbound; outOpNode3.IsOperation = true; resultList.Add(outOpNode3); }
次のコードを追加し続けて、
Microsoft.ServiceModel.Channels.MetadataRetrievalNode
オブジェクトの配列を返します。return resultList.ToArray();
Visual Studio の [ ファイル ] メニューの [ すべて保存] をクリックします。
[ビルド] メニューの [ソリューションのビルド] をクリックします。 プロジェクトを正常にコンパイルする必要があります。 そうでない場合は、上記のすべての手順に従っていることを確認します。
注
作業を保存しました。 この時点で Visual Studio を安全に閉じるか、次の手順「 手順 6: エコー アダプターのメタデータ解決ハンドラーを実装する」に進むことができます。
私は何をしましたか?
Microsoft.ServiceModel.Channels.Common.IMetadataSearchHandler
インターフェイスの Microsoft.ServiceModel.Channels.Common.IMetadataSearchHandler.Search%2A
メソッドを実装することで、Echo アダプターのメタデータ検索機能を実装しました。 具体的には、条件に一致するすべての操作に対して Microsoft.ServiceModel.Channels.MetadataRetrievalNode
オブジェクトを作成し、 Microsoft.ServiceModel.Channels.MetadataRetrievalNode
オブジェクトの配列を返しました。
次のステップ
メタデータ解決機能と、送信および受信メッセージ交換機能を実装します。 最後に、エコー アダプターをビルドして展開します。
こちらもご覧ください
手順 4: エコー アダプターのメタデータ参照ハンドラーを実装する
手順 6: エコー アダプターのメタデータ解決ハンドラーを実装する
チュートリアル 1: エコー アダプターを開発する