연습: 웹 서비스의 데이터에 연결(Windows Forms)
이 연습에서는 데이터 소스 구성 마법사를 사용하여 웹 서비스에 응용 프로그램을 연결하는 방법을 보여 줍니다. 연습을 통해 Live Search 웹 서비스에 연결하고 응용 프로그램에서 검색 쿼리를 실행합니다. 이 서비스에서 반환되는 데이터, 즉 검색 결과는 Windows Form에 표시됩니다.
이 연습에서 수행할 작업은 다음과 같습니다.
새 Windows 응용 프로그램 프로젝트 만들기
응용 프로그램에 서비스 참조 추가(Live Search 서비스에 연결)
검색 쿼리를 실행할 컨트롤 추가(해당 서비스에서 노출하는 메서드 호출)
서비스에 액세스하고 데이터를 반환하는 코드 작성
서비스에서 반환하는 데이터를 BindingSource에 바인딩
서비스에서 반환하는 데이터를 표로 표시
AppID 가져오기
Live Search의 AppID는 무료로 사용 가능하며 Live Search 서비스에 연결된 응용 프로그램을 고유하게 식별합니다. 이 서비스에 액세스하려면 AppID가 필요합니다.
AppID를 가져오려면
https://www.bing.com/developer/로 이동하여 무료 AppID를 가져옵니다.
참고
해당 서비스에서 AppID 유효성을 검사하는 데 30-60분 정도의 시간이 걸릴 수 있습니다.응용 프로그램 실행 중에 일반적인 '클라이언트 오류'가 이 시간 내에 발생하면 Live Search 서버에서 AppID의 활성화가 아직 진행 중일 가능성이 높습니다.
프로젝트 만들기
새 프로젝트를 만들려면
파일 메뉴에서 새 프로젝트를 만듭니다.
Windows Forms 응용 프로그램을 선택하고 이름을 WebServiceWalkthrough로 지정합니다.
확인을 클릭합니다.
프로젝트가 만들어져 솔루션 탐색기에 추가되었습니다.
서비스에 연결하려면
데이터 소스 구성 마법사를 실행하여 웹 서비스에 연결합니다.
Live Search 웹 서비스에 연결하려면
데이터 메뉴에서 데이터 소스 표시를 클릭합니다.
데이터 소스 창에서 새 데이터 소스 추가를 선택합니다.
데이터 소스 형식 선택 페이지에서 서비스를 선택하고 다음을 클릭합니다.
서비스 참조 추가 대화 상자의 URL 상자에 https://soap.search.msn.com/webservices.asmx?wsdl을 입력합니다.
이동을 클릭합니다.
웹 서비스가 발견되면 네임스페이스를 LiveSearchService로 변경합니다.
확인을 클릭하고 마침을 클릭하여 서비스 참조를 프로젝트에 추가합니다.
서비스 참조가 프로젝트에 추가되고 데이터 소스 창은 해당 서비스에서 반환한 항목으로 채워집니다.
참고
여러 웹 서비스에서 서로 다른 기능을 노출하기 때문에 이 연습의 다음 단계는 Live Search 웹 서비스를 사용하는 것으로 한정합니다.웹 서비스에서 제공하는 데이터를 사용하는 전형적인 프로세스는 먼저 서비스 인스턴스를 만들고 해당 서비스가 노출하는 메서드를 호출하는 것입니다.데이터 소스 창의 항목을 끌어 오면 해당 폼에 BindingSource 구성 요소가 포함됩니다. 이 구성 요소의 DataSource 속성을 서비스에서 반환한 데이터로 설정합니다.
서비스를 통해 반환되는 데이터를 표시하는 DataGridView 만들기
데이터 소스 창에서 폼으로 항목을 끌어 와 데이터 바인딩된 데이터 표를 만듭니다. 표를 추가한 후 나타낼 열만 표시하도록 열을 구성합니다. 그런 다음 Url 열을 링크로 설정하여 사용자가 해당 Url을 클릭하고 검색 쿼리에서 반환되는 웹 사이트로 이동할 수 있게 합니다.
데이터 바인딩된 DataGridView를 만들려면
데이터 소스 창에서 SearchResponse 노드를 확장합니다.
Responses 노드를 확장합니다.
Results 노드를 폼으로 끌어 옵니다.
DataGridView, BindingSource 및 BindingNavigator가 폼에 추가됩니다.
폼에 추가된 resultsDataGridView를 선택합니다.
속성 창에서 Columns 속성을 선택하고 줄임표(…)를 클릭하여 열 편집 대화 상자(디자인 뷰)를 엽니다.
Url 열을 선택하고 다음과 같이 설정합니다.
ColumnType 속성: DataGridViewLinkColumn
AutoSizeMode 속성: AllCells
Title, Description 및 Url 열을 제외한 나머지 모든 열을 제거합니다.
확인을 클릭합니다.
검색 조건 입력 및 검색 쿼리 실행을 위한 컨트롤 추가
기존 도구 스트립에 검색 쿼리 실행을 위한 컨트롤을 추가합니다.
텍스트 상자 및 단추를 폼에 추가하려면
폼의 도구 스트립에 있는 회색 디스크 아이콘을 마우스 오른쪽 단추로 클릭하고 삽입, 텍스트 상자를 차례로 선택합니다.
속성 창에서 Name 속성을 searchCriteriaTextBox로 설정합니다.
Text 속성을 Visual Studio로 설정합니다.
단추를 도구 스트립에 추가하고 이름을 searchButton으로 지정합니다.
속성 창에서 DisplayStyle 속성을 Text로 설정합니다.
Text 속성을 Search로 설정합니다.
표에서 클릭한 웹 사이트를 여는 이벤트 처리기 만들기
CellContentClick 이벤트에 대한 이벤트 처리기를 추가합니다.
CellContentClick 이벤트 처리기를 만들려면
폼에서 resultsDataGridView를 선택하고 속성 창에서 해당 이벤트 단추를 클릭합니다. 이벤트 단추는 번개 모양 아이콘이 있는 단추입니다.
CellContentClick 이벤트를 두 번 클릭하여 처리기 스텁을 만들고 이 스텁으로 이동합니다.
클릭한 열을 확인하고 Url 열이 클릭된 경우 웹 페이지로 이동하는 코드를 추가합니다.
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 서비스에 액세스하고 검색 쿼리를 실행하는 코드 추가
응용 프로그램에서 서비스의 인스턴스를 인스턴스화하고 서비스에 의해 노출되는 메서드를 호출하여 서비스에 액세스합니다.
서비스에 액세스하여 서비스를 사용하려면
코드 편집기에서 Form1을 엽니다.
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 값으로 바꿉니다.
검색 단추 클릭 시 검색을 실행하는 이벤트 처리기 만들기
searchButton.Click 이벤트에 대한 이벤트 처리기를 만들고 RunSearchRequest 메서드를 호출합니다.
버튼 클릭 시 검색을 구현하려면
디자인 뷰에서 Form1을 엽니다.
Search 단추를 두 번 클릭합니다.
다음 코드 줄을 생성된 이벤트 처리기에 추가합니다.
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(); }
응용 프로그램 실행
응용 프로그램을 실행하여 검색을 수행합니다.
응용 프로그램을 실행하고 검색을 수행하려면
F5 키를 눌러 응용 프로그램을 실행합니다.
Search를 클릭하여 searchCriteriaTextBox의 기본 텍스트인 Visual Studio를 웹에서 검색합니다.
첫 번째 검색 결과 10개가 표에 표시됩니다.
Url 중 하나를 클릭하여 해당 웹 사이트로 이동합니다.
텍스트 상자에 Redmond WA Weather를 입력하고 Search를 클릭합니다.
새 검색 결과로 표가 업데이트됩니다.
다음 단계
Live Search 서비스에 액세스하는 것은 Windows Forms 응용 프로그램에서 데이터 바인딩 기능을 활용하여 서비스에 의해 반환된 데이터를 표시하는 방법을 이해하기 위한 출발점일 뿐입니다. 다른 서비스에 연결한 후 데이터 소스 창의 항목을 끌어 오면 해당 폼에 BindingSource 구성 요소가 포함됩니다. 이 구성 요소의 DataSource 속성을 서비스에서 반환한 데이터로 설정합니다. 자세한 내용은 BindingSource 구성 요소 개요를 참조하십시오.
참고
데이터 소스 창에 표시되는 항목은 웹 서비스에서 반환하는 정보에 따라 달라집니다.일부 웹 서비스는 데이터 소스 구성 마법사가 바인딩할 수 있는 개체를 만드는 데 필요한 정보를 충분히 제공하지 않을 수도 있습니다.예를 들어, 검색 가능한 스키마를 제공하지 않는 개체를 웹 서비스에서 반환하면 마법사가 완료될 때 데이터 소스 창에 아무런 항목도 표시되지 않습니다.
응용 프로그램에 기능을 추가하려면
데이터 소스 창에서 항목을 선택하여 폼으로 끌어 옵니다. 자세한 내용은 Visual Studio에서 데이터에 Windows Forms 컨트롤 바인딩를 참조하십시오.
폼에서 서비스의 인스턴스를 만듭니다.
생성된 DataSource 속성을 웹 서비스에서 반환한 데이터로 설정합니다.