チュートリアル: Web サービス内のデータへの接続 (Windows フォーム)

このチュートリアルでは、データ ソース構成ウィザードを使用して、アプリケーションを Web サービスに接続する方法を示します。 Live Search Web サービスに接続し、アプリケーションから検索クエリを実行します。 サービスによって返されたデータ (検索結果) は、Windows フォームに表示されます。

このチュートリアルでは、以下のタスクを行います。

  • 新しい Windows アプリケーション プロジェクトを作成します。

  • アプリケーションにサービス参照を追加する (Live Search サービスに接続する)。

  • 検索クエリを実行するコントロールを追加する (サービスによって公開されるメソッドを呼び出す)。

  • サービスにアクセスしてデータを返すコードを記述する。

  • サービスから返されたデータを BindingSource にバインドする。

  • サービスから返されたデータをグリッドに表示する。

AppID の取得

Live Search からの AppID は、無料で入手でき、Live Search サービスに対してアプリケーションを一意に識別します。 このサービスにアクセスするには、AppID が必要です。

AppID を取得するには

  • http://search.live.com/developer に移動し、無料の AppID を入手します。

    注意

    AppID をサービスで検証するために、多少の時間 (30 ~ 60 分) がかかることがあります。アプリケーションの実行中に、この時間内で一般的な「クライアント エラー」が発生した場合、AppID がまだ Live Search サーバー上で有効化されている最中である可能性があります。

プロジェクトの作成

新しいプロジェクトを作成するには

  1. [ファイル] メニューで新しいプロジェクトを作成します。

  2. [Windows フォーム アプリケーション] をクリックし、「WebServiceWalkthrough」という名前を付けます。

  3. [OK] をクリックします。

    プロジェクトが作成されてソリューション エクスプローラーに追加されます。

サービスへの接続

データ ソース構成ウィザードを実行して、Web サービスに接続します。

Live Search Web サービスに接続するには

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

  2. [データ ソース] ウィンドウで、[新しいデータ ソースの追加] をクリックします。

  3. [データソースの種類を選択] ページの [サービス] を選択し、[次へ] をクリックします。

  4. [サービス参照の追加] ダイアログ ボックスの [URL] ボックスに、「https://soap.search.msn.com/webservices.asmx?wsdl」と入力します。

  5. [移動] をクリックします。

  6. Web サービスが見つかったら、名前空間を「LiveSearchService」に変更します。

  7. [OK] をクリックし、[完了] をクリックしてプロジェクトにサービス参照を追加します。

    サービス参照がプロジェクトに追加され、サービスによって返された項目に基づいて [データ ソース] ウィンドウにデータが読み込まれます。

注意

Web サービスごとに公開される機能が異なるため、このチュートリアルの以降の手順は、Live Search Web サービスの利用に固有の手順です。サービスのデータを利用するための典型的なプロセスは、サービスのインスタンスを作成し、サービスで公開されているメソッドを呼び出すことです。[データ ソース] ウィンドウから項目をドラッグした後、フォームには BindingSource コンポーネントが含まれています。DataSource プロパティに、サービスによって返されたデータを設定します。

サービスによって返されたデータを表示する DataGridView の作成

[データ ソース] ウィンドウからフォームに項目をドラッグして、データ バインド データ グリッドを作成します。 グリッドを追加したら、表示する必要がある列のみを表示するように列を構成します。 次に、[Url] 列にリンクを設定し、ユーザーが URL をクリックして検索クエリによって返された Web サービスに移動できるようにします。

データ バインド DataGridView を作成するには

  1. [データ ソース] ウィンドウの [SearchResponse] ノードを展開します。

  2. [Responses] ノードを展開します。

  3. [Results] ノードをフォームにドラッグします。

    DataGridView、BindingSource、および BindingNavigator がフォームに追加されます。

  4. フォームに追加された resultsDataGridView を選択します。

  5. [プロパティ] ウィンドウで [Columns] プロパティを選択し、省略記号 ([…]) をクリックして [列の編集] ダイアログ ボックス (デザイン ビュー)を開きます。

  6. [Url] 列を選択し、以下の設定を行います。

    1. [ColumnType] プロパティを [DataGridViewLinkColumn] に設定します。

    2. [AutoSizeMode] プロパティを [AllCells] に設定します。

  7. [Title] 列、[Description] 列、および [Url] 列を除くすべての列を削除します。

  8. [OK] をクリックします。

検索条件を入力し検索クエリを実行するためのコントロールの追加

検索クエリを実行するために既存のツール ストリップにコントロールを追加します。

フォームにテキスト ボックスとボタンを追加するには

  1. フォームのツール ストリップで淡色表示になっているディスク アイコンを右クリックし、[挿入]、[TextBox] の順に選択します。

  2. プロパティ ウィンドウで、[Name] プロパティを「searchCriteriaTextBox」に設定します。

  3. [Text] プロパティを「Visual Studio」に設定します。

  4. ツール ストリップにボタンを追加し、「searchButton」という名前を付けます。

  5. [プロパティ] ウィンドウで、[DisplayStyle] プロパティを [Text] に設定します。

  6. [Text] プロパティを「Search」に変更します。

グリッドでクリックされた Web サイトを開くイベント ハンドラーの作成

CellContentClick イベントのイベント ハンドラーを追加します。

CellContentClick イベント ハンドラーを作成するには

  1. フォームで resultsDataGridView を選択し、[プロパティ] ウィンドウで [イベント] ボタンをクリックします。 [イベント] ボタンは、稲妻のアイコンが付いたボタンです。

  2. [CellContentClick] イベントをダブルクリックしてハンドラー スタブを作成し、そのハンドラー スタブに移動します。

  3. クリックされた列を確認するコードと、[Url] 列がクリックされた場合に Web ページに移動するコードを追加します。

    Private Sub ResultsDataGridView_CellContentClick( _
        ByVal sender As System.Object, _
        ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) _
        Handles ResultsDataGridView.CellContentClick
    
        ' When the content in a cell is clicked check to see if it is the Url column. 
        ' If it is, pass the url to the Process.Start method to open the web page. 
        If ResultsDataGridView.Columns(e.ColumnIndex).DataPropertyName = "Url" Then
            System.Diagnostics.Process.Start(ResultsDataGridView.SelectedCells(0).Value)
        End If 
    End Sub
    
    private void resultsDataGridView_CellContentClick(object sender, DataGridViewCellEventArgs e)
    {
        // When the content in a cell is clicked check to see if it is the Url column. 
        // If it is, pass the url to the Process.Start method to open the web page. 
        if (resultsDataGridView.Columns[e.ColumnIndex].DataPropertyName == "Url")
        {
            System.Diagnostics.Process.Start(resultsDataGridView.SelectedCells[0].Value.ToString());
        }
    }
    

Live Search サービスにアクセスし検索クエリを実行するコードの追加

アプリケーションでサービスのインスタンスをインスタンス化し、サービスによって公開されるメソッドを呼び出すことにより、サービスにアクセスします。

サービスにアクセスして利用するには

  1. コード エディターで Form1 を開きます。

  2. Form1 に次のメソッドを追加します。

    Private Sub RunSearchRequest()
    
        ' Create an instance of the service. 
        Dim searchService As New LiveSearchService.MSNSearchPortTypeClient
    
        ' Instantiate a new SearchRequest. 
        Dim searchRequest As New LiveSearchService.SearchRequest
    
        ' Create a new SourceRequest. 
        Dim sourceRequest(1) As LiveSearchService.SourceRequest
        sourceRequest(0) = New LiveSearchService.SourceRequest
    
        ' To search the web, set the SourceType to Web.
        sourceRequest(0).Source = LiveSearchService.SourceType.Web
    
        ' Set the columns you want the query to return.
        sourceRequest(0).ResultFields = _
            LiveSearchService.ResultFieldMask.Description And _
            LiveSearchService.ResultFieldMask.Url And _
            LiveSearchService.ResultFieldMask.Title
    
        ' Search for the text in the textbox.
        searchRequest.Query = searchCriteriaTextBox.Text
    
        ' Set the SearchRequest to the SourceRequest array.
        searchRequest.Requests = sourceRequest
    
    
        ' Replace with a valid AppID. Obtain a free AppID at: 
        ' http://search.live.com/developer 
        searchRequest.AppID = "AppID"
        searchRequest.CultureInfo = "en-US" 
    
        ' Create a SearchResponse, then call the Search method 
        ' and assign the return value to the response object. 
        Dim searchResponse As LiveSearchService.SearchResponse = _
            searchService.Search(searchRequest)
    
        ' Bind the results to the form's BindingSource.
        ResultsBindingSource.DataSource = searchResponse.Responses(0).Results
    End Sub
    
    private void RunSearchRequest()
    {
        // Create an instance of the service.
        LiveSearchService.MSNSearchPortTypeClient searchService =
            new LiveSearchService.MSNSearchPortTypeClient();
    
        // Instantiate a new search request.
        LiveSearchService.SearchRequest searchRequest = new LiveSearchService.SearchRequest();
    
        // Create a new SourceRequest.
        LiveSearchService.SourceRequest[] sourceRequest = new LiveSearchService.SourceRequest[1];
        sourceRequest[0] = new LiveSearchService.SourceRequest();
    
        // Set the number of results to return.
        sourceRequest[0].Count = 7;
    
        // To search the web, set the SourceType to Web.
        sourceRequest[0].Source = LiveSearchService.SourceType.Web;
    
        // Set the columns to be returned from the search query.
        sourceRequest[0].ResultFields = LiveSearchService.ResultFieldMask.Description |
            LiveSearchService.ResultFieldMask.Url |
            LiveSearchService.ResultFieldMask.Title;
    
        // Set the search query to the value in the text box.
        searchRequest.Query = searchCriteriaTextBox.Text;
    
        // Set the search request to the array of source requests.
        searchRequest.Requests = sourceRequest;
    
        // Replace with a valid AppID. Obtain a free AppID at: 
        // http://search.live.com/developer 
        searchRequest.AppID = "AppID";
        searchRequest.CultureInfo = "en-US";
    
        // Create a SearchResponse, then call the search method 
        // and assign the return value to the response object.
        LiveSearchService.SearchResponse searchResponse = searchService.Search(searchRequest);
    
        // Bind the results from the search query to the form's BindingSource.
        resultsBindingSource.DataSource = searchResponse.Responses[0].Results;
    }
    

注意

searchRequest.AppID = "AppID" を、Live Search サービスから取得した AppID 値で置き換えてください。

[Search] ボタンがクリックされたときに検索を実行するイベント ハンドラーの作成

searchButton.Click イベントのイベント ハンドラーを作成し、RunSearchRequest メソッドを呼び出します。

ボタンがクリックされたときの検索を実装するには

  1. デザイン ビューで [Form1] を開きます。

  2. [Search] ボタンをダブルクリックします。

  3. 生成されたハンドラーに次のコード行を追加します。

    Private Sub searchButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles searchButton.Click
        RunSearchRequest()
    End Sub
    
    private void searchButton_Click(object sender, EventArgs e)
    {
        RunSearchRequest();
    }
    

アプリケーションの実行

アプリケーションを実行し、検索を実行します。

アプリケーションを実行し、検索を実行するには

  1. アプリケーションを実行します (F5 キーを押します)。

  2. [Search] をクリックして、searchCriteriaTextBox の既定のテキストである「Visual Studio」を Web で検索します。

    グリッドに上位 10 件の検索結果が表示されます。

  3. いずれかの URL をクリックして、その Web サイトに移動します。

  4. テキスト ボックスに「Redmond WA Weather」と入力し、[Search] をクリックします。

    グリッドが新しい検索結果で更新されます。

次の手順

Live Search サービスへのアクセスは、Windows フォーム アプリケーションのデータ バインディング機能を利用して、サービスから返されたデータを表示する方法を理解するための開始点に過ぎません。 別のサービスに接続し、[データ ソース] ウィンドウから項目をドラッグした後、フォームには BindingSource コンポーネントが含まれています。DataSource プロパティに、サービスによって返されたデータを設定します。 詳細については、「BindingSource コンポーネントの概要」を参照してください。

注意

[データ ソース] ウィンドウに表示される項目は、Web サービスから返される情報に応じて異なります。Web サービスによっては、データ ソース構成ウィザード でバインドできるオブジェクトを作成するための十分な情報を提供しないものもあります。たとえば、Web サービスから検出可能なスキーマを提供しないオブジェクトが返された場合、ウィザードが完了しても [データ ソース] ウィンドウに項目は表示されません。

アプリケーションに機能を追加するには

参照

概念

Visual Studio でのデータへのコントロールのバインド

アプリケーションでのデータ編集

データの検証

データの保存

その他の技術情報

データに関するチュートリアル