내보내기(0) 인쇄
모두 확장

연습: 분산 응용 프로그램 만들기

Visual Studio .NET 2003

이 연습에서는 다계층 분산 인트라넷 응용 프로그램을 만듭니다. 응용 프로그램은 데이터, 비즈니스 개체 및 사용자 인터페이스의 세 가지 논리 계층으로 구성됩니다. 데이터 계층은 SQL Server의 데이터베이스입니다. 비즈니스 개체 계층에서는 데이터에 대한 액세스와 클라이언트에 데이터를 배포하는 작업을 처리합니다. 사용자 인터페이스 계층은 웹 기반 응용 프로그램과 일반적인 Windows 응용 프로그램으로 구성됩니다. 다음 그림에서는 응용 프로그램의 아키텍처를 설명합니다.

사용자가 만드는 분산 응용 프로그램의 아키텍처

여기서는 찾기 및 편집 기능이 있는 단순한 데이터 응용 프로그램을 작성하게 됩니다. 또한 SQL Server Pubs 샘플 데이터베이스에서 Authors 테이블을 표시하는 Windows 및 웹 기반 클라이언트를 모두 작성합니다. 웹 부분의 경우 Web Forms 디자이너를 사용하여 표준 HTML 3.2 브라우저와 호환되는 웹 페이지를 만들게 됩니다. 서버에서 Web Forms 코드는 XML Web services를 호출하여 해당 데이터베이스에서 Authors 정보를 포함하는 데이터를 검색합니다. Windows 부분의 경우 이와 같은 XML Web services와 통신하는 Windows 응용 프로그램을 작성하여 작성자 정보를 포함하는 데이터 집합을 검색하게 됩니다. XML Web services와의 통신은 HTTP 및 XML을 사용하여 처리합니다.

데이터베이스는 다른 서버에 있더라도 XML Web services와 클라이언트 응용 프로그램을 동일한 서버에 만들려고 합니다. 이 때 응용 프로그램 서버와 데이터베이스 서버는 같은 인트라넷에 있어야 합니다. 이러한 프로젝트 구성을 사용하면 Windows 인증을 사용하여 데이터베이스에 액세스하고 응용 프로그램을 테스트할 수 있습니다. 또한 XML Web services와 클라이언트 응용 프로그램의 상호 작용을 확인할 수 있도록 리소스 액세스와 관련된 대부분의 정보가 제거됩니다. 이 구성은 직접 만든 응용 프로그램에 대해 원하는 아키텍처가 아닐 수도 있습니다. 다른 보안 모델과 아키텍처에 대한 자세한 내용은 웹 응용 프로그램에 대한 액세스 권한을 참조하십시오.

시스템 요구 사항

이 연습을 따라 하려면 다음과 같은 요건을 갖추어야 합니다.

  • Windows 통합 인증에 맞게 구성된 Pubs SQL Server 샘플 데이터베이스가 있는 서버에 액세스할 수 있어야 합니다. Pubs 데이터베이스는 SQL Server와 함께 설치할 수 있는 샘플 데이터베이스 중 하나입니다.
  • Visual Studio .NET에서 데이터가 어떻게 처리되는지에 대한 기본적인 이해. 자세한 내용은 ADO.NET을 사용한 데이터 액세스 소개를 참조하십시오.

분산 응용 프로그램을 만드는 프로세스

분산 응용 프로그램을 개발하는 한 가지 방법은 한 번에 하나의 계층을 만드는 것입니다. 대개는 데이터 계층에서 시작하여 중간 계층의 비즈니스 규칙 개체로 이동한 다음 마지막으로 사용자 인터페이스를 만들게 됩니다. 이 연습 과정에서는 데이터가 이미 생성되었으며 SQL Server의 Pubs 데이터베이스에서 해당 데이터를 사용할 수 있습니다. 따라서 이 연습 과정은 비즈니스 개체인 XML Web services 만들기에서 시작하며, 그 다음에 두 개의 사용자 인터페이스인 Web Forms 페이지와 Windows Form을 만들게 됩니다.

연습 과정은 다음과 같습니다.

  1. 중간 계층 비즈니스 개체 만들기
    1. ASP.NET 웹 서비스 프로젝트 만들기
    2. 데이터베이스 연결과 데이터 집합 스키마 만들기 및 구성
    3. 비즈니스 개체에서 데이터 집합 노출
  2. 사용자 인터페이스 만들기
    1. Windows 사용자 인터페이스 만들기
    2. 웹 사용자 인터페이스 만들기
  3. 솔루션 배포 또는 다른 기능 추가

중간 계층 비즈니스 개체 만들기

여기서 만들게 되는 비즈니스 개체는 웹 서버에서 실행되어 분산 응용 프로그램에 필요한 성능과 확장성을 제공합니다. 또한 클라이언트에서 표준 인터넷 프로토콜을 사용하여 어떠한 플랫폼에서도 사용자의 비즈니스 개체와 통신할 수 있도록 해당 비즈니스 개체를 XML Web services로 구현하게 됩니다. 자세한 내용은 XML Web services를 사용한 웹 프로그래밍을 참조하십시오.

이 연습 과정에서 XML Web services 구성 요소는 데이터 연결과 데이터 집합 정의를 보유합니다. 그런 다음, XML Web services 메서드가 추가되어 데이터 집합를 노출합니다. 따라서 다른 응용 프로그램에서 해당 데이터 집합을 보고 수정할 수 있게 됩니다.

ASP.NET 웹 서비스 프로젝트 템플릿은 해당 인터페이스를 XML Web services로 노출하는 중간 계층 구성 요소를 만들도록 설계된 웹 기반 프로젝트입니다. 자세한 내용은 Visual Studio의 ASP.NET 웹 서비스 프로젝트를 참조하십시오.

XML Web services는 두 개의 메서드를 노출합니다. 첫 번째 메서드인 GetAuthors는 데이터베이스에서 데이터 집합을 반환합니다. 두 번째 메서드인 UpdateAuthors는 사용자가 변경한 내용으로 데이터베이스를 업데이트합니다. 이러한 메서드를 구현하도록 몇 가지 전용 멤버가 만들어집니다. 여기에는 데이터 집합 정의, 데이터 어댑터, 데이터 연결 및 데이터베이스에서 데이터를 검색하고 데이터베이스를 업데이트하기 위한 몇 가지 명령 개체가 포함됩니다. 다음 다이어그램에서는 XML Web services에 대해 설명합니다.

분산 응용 프로그램의 중간 계층

ASP.NET 웹 서비스 프로젝트를 만들려면

  1. 파일 메뉴에서 새로 만들기를 가리킨 다음 프로젝트를 클릭하여 새 프로젝트 대화 상자를 표시합니다.
  2. 사용하려는 언어에 따라 프로젝트 형식 창에서 Visual Basic 프로젝트 또는 Visual C# 프로젝트를 선택한 후 템플릿 창에서 ASP.NET 웹 서비스를 선택합니다.
  3. 위치 상자에 개발 컴퓨터에 있는 웹 서버의 이름과 프로젝트 이름(http://ServerName/AuthorsWebService)을 입력한 다음 확인을 클릭합니다.
       웹 서버가 사용자의 컴퓨터에 있으므로 서버 이름 LOCALHOST를 사용할 수 있습니다.
       ASP.NET 웹 서비스 프로젝트를 만드는 데 문제가 발생하면 웹 액세스 실패 대화 상자를 참조하십시오.
  4. AuthorsWebService 프로젝트가 솔루션에 추가됩니다. Service1.asmx에 대한 구성 요소 디자이너가 개발 환경에 나타납니다.
  5. 솔루션 탐색기에서 Service1.asmx를 두 번 클릭하여 선택합니다.
  6. 속성 창에서 Service1Name 속성을 AuthorsService로 설정합니다.
  7. 솔루션 탐색기에서 Service1.asmx 파일을 마우스 오른쪽 단추로 클릭하고, 이름 바꾸기를 선택하고, 서비스 이름과 일치하도록 파일의 이름을 AuthorsService.asmx로 바꿉니다.

    이 구성 요소에서 데이터 저장소에 대한 연결을 만들고 데이터 집합을 사용하여 데이터의 인스턴스를 가져옵니다.

데이터베이스 연결과 데이터 집합 스키마 만들기 및 구성

XML Web services에 SqlDataAdapter 개체와 SqlConnection 개체를 추가합니다. 연결 개체는 데이터 어댑터가 데이터베이스를 쿼리하고 DataSet 개체에 쿼리 결과를 제공하는 동안 데이터베이스에 대한 새 연결을 만듭니다. 또한 데이터 어댑터는 데이터 집합에 대한 변경 내용으로 데이터베이스를 업데이트합니다. 데이터베이스에 대한 연결을 사용하여, 데이터베이스에 있는 정보의 인스턴스를 보유하게 될 데이터 집합이 만들어집니다. 이 데이터 집합은 Windows Form 및 Web Forms 페이지에 데이터를 표시하기 위해 이 연습 과정 뒷부분에서 사용됩니다. 이 내용에 대한 개요를 보려면 분산 응용 프로그램 및 데이터 통합 소개를 참조하십시오.

데이터베이스 연결 및 데이터 어댑터를 만들려면

  1. 서버 탐색기를 클릭합니다.
    참고   기본적으로 서버 탐색기는 개발 환경 왼쪽에 세로 탭으로 나타납니다. 이 탭이 나타나지 않으면 보기 메뉴를 클릭하고 서버 탐색기를 선택하십시오.
  2. 서버 탐색기에서 데이터 연결 노드를 마우스 오른쪽 단추로 클릭한 다음 바로 가기 메뉴에서 연결 추가를 선택합니다.
  3. 데이터 연결 속성 대화 상자의 연결 탭에서 pubs 데이터베이스가 설치된 SQL Server의 이름을 입력합니다. 로컬 컴퓨터에 SQL Server가 있으면 (local)이라고 입력합니다.
  4. 로그온 정보에 대해 Windows NT의 통합 보안 사용을 선택합니다.
    참고   사용자의 컴퓨터에 통합 보안이 설치되어 있지 않으면 네트워크 관리자에게 문의하십시오.
  5. 목록에서 pubs 데이터베이스를 선택합니다.
  6. 연결 테스트를 클릭하여 제공된 정보가 맞는지 확인한 다음 확인를 클릭하여 연결을 설정합니다.

    서버 탐색기의 데이터 연결 노드에 새 노드가 나타납니다.

    참고   데이터베이스 연결이 실패하면 데이터베이스 관리자에게 문의하십시오.
  7. 서버 탐색기에서 새 연결 노드에 대해 노드를 확장한 다음 테이블 노드를 확장합니다.
  8. authors 노드를 찾은 다음 authors 테이블에 필드를 표시하도록 확장합니다.
  9. Ctrl 키를 누른 상태에서 클릭하여 au_id, au_lname, au_fnamecity 필드를 선택합니다.
  10. 서버 탐색기에서 디자인 화면으로 authors 테이블을 끌어 옵니다. 디자이너에 SqlDataAdapter1 개체와 SqlConnection1 개체가 나타납니다. 이제 데이터베이스로의 연결이 형성되었으며 정보의 전송은 SqlDataAdapter1 개체에 의해 처리됩니다. 이러한 구성 요소는 authors 테이블이 들어 있는 데이터 집합을 데이터베이스 안으로 또는 밖으로 이동하도록 구성됩니다.
    참고   이 연습 과정에서는 SQL Server 7.0 이상으로 작업하도록 최적화된 SqlDataAdapter 개체를 사용합니다. 그러나 보다 일반적인 OleDbDataAdapter 개체를 사용하여, ADO.NET을 통해 OLE DB 호환 데이터 소스에 액세스하도록 할 수 있습니다. SQL Server 데이터베이스가 아닌 데이터베이스에 연결한 경우에는 프로젝트 시스템에 의해 OleDbDataAdapter 개체와 OleDbConnection 개체가 만들어집니다.
    참고   이 연습 과정에서는 authors 테이블의 일부 열과 모든 행을 사용하여 데이터 집합을 입력했습니다. 프로덕션 응용 프로그램에서는 주로 필요한 열과 행만 반환하는 쿼리를 만들어 데이터 액세스를 최적화합니다. 예제를 보려면 연습: 매개 변수화된 쿼리를 사용하여 Windows Form에 데이터 표시를 참조하십시오.

통합 보안을 사용하여 작업하려면 프로젝트의 보안 설정을 구성해야 합니다. 익명 액세스를 해제하고 개인 액세스를 설정하면 됩니다. 자세한 내용은 보안 모델을 참조하십시오.

Windows 통합 인증을 구성하려면

프로젝트의 Windows 통합 인증을 구성하려면 인터넷 정보 서비스 도구를 사용하여 프로젝트 파일을 변경하고 프로젝트를 구성해야 합니다.

  1. 인터넷 정보 서비스 도구를 시작합니다. 제어판관리 도구에서 실행할 수 있습니다. 이 도구를 시작하는 방법에 대한 자세한 내용은 Windows 도움말 문서를 참조하십시오.
  2. 서버의 노드를 확장합니다.
  3. 기본 웹 사이트 노드를 확장합니다.
  4. AuthorsWebService의 노드를 마우스 오른쪽 단추로 클릭하고 바로 가기 메뉴에서 속성을 선택합니다.
  5. 디렉터리 보안 탭을 클릭합니다.
  6. 익명 액세스 및 인증 제어 섹션에서 편집 단추를 클릭합니다.
  7. 익명 액세스 확인란의 선택을 취소합니다.
  8. Windows 통합 인증 확인란을 선택합니다. XML Web services 디렉터리가 구성되었습니다.
  9. Visual Studio의 프로젝트로 돌아가 솔루션 탐색기에서 Web.config 파일을 두 번 클릭합니다.
  10. <system.web> 태그 뒤에 있는 줄에 다음 태그를 추가하여 XML Web services의 통합 보안을 구성합니다.
    <identity impersonate="true"/>
    

데이터 집합 클래스 정의를 만들려면

  1. 솔루션 탐색기에서 AuthorsService.asmx 파일을 두 번 클릭하여 디자이너에서 파일을 엽니다.
  2. 데이터 메뉴에서 데이터 집합 생성을 선택합니다. 데이터 집합 생성 대화 상자에서 새로 만들기를 선택하고 데이터 집합 이름을 "authors1"으로 지정합니다. "이 데이터 집합을 디자이너에 추가합니다."라는 상자는 선택하지 마십시오.
    참고   데이터 집합 스키마 파일인 authors1.xsd가 만들어져서 프로젝트에 추가됩니다. 이 스키마 파일은 authors1의 클래스 정의를 포함합니다. DataSet 클래스에서 상속되는 이 클래스는 authors 테이블의 형식화된 데이터 집합 정의를 포함합니다.
  3. 파일 메뉴에서 모두 저장을 선택합니다.

비즈니스 개체에서 authors1 데이터 집합 노출

이 연습 과정의 다음 단계는 비즈니스 개체에서 만든 데이터 집합 개체를 노출하는 것입니다. 이렇게 하면 해당 데이터 집합을 Windows 또는 웹 응용 프로그램에서 사용할 수 있게 됩니다.

XML Web services에 메서드 추가

  1. 디자이너에서 AuthorsService.asmx를 아직 열지 않은 경우 솔루션 탐색기에서 이를 두 번 클릭합니다.
  2. 보기 메뉴에서 코드를 클릭합니다.
  3. 클라이언트에 데이터 집합을 전달하기 위한 GetAuthors라는 메서드를 추가합니다.

    아래에 표시된 이 메서드는 새 authors1 데이터 집합을 만들고 authors 테이블을 기반으로 하는 SqlDataAdapter1 개체를 사용하여 이 집합을 채웁니다. 그런 다음 메서드는 데이터 집합을 반환합니다.

    ' Visual Basic
    <WebMethod> Public Function GetAuthors() As authors1
       Dim authors As New authors1()
       SqlDataAdapter1.Fill(authors)
       Return authors
    End Function
    
    // C#
    [WebMethod]
    public authors1 GetAuthors() 
    {
       authors1 authors = new authors1();
       sqlDataAdapter1.Fill(authors);
       return authors;
    }
    
  4. 클라이언트에서 다시 데이터베이스로 변경 내용을 전파하는 UpdateAuthors라는 메서드를 추가합니다.

    아래에 표시된 이 메서드는 변경된 데이터를 포함하고 SqlDataAdapter1.Update 메서드를 통해 데이터베이스를 업데이트하는 authors1 데이터 집합 매개 변수(authorChanges)를 갖습니다. Update 메서드는 데이터 집합에 변경 내용을 적용합니다. 데이터 집합은 클라이언트로 반환됩니다. 그러면 클라이언트는 반환된 해당 데이터 집합을 사용하여 authors1 데이터 집합의 자체 인스턴스를 업데이트합니다. Update 메서드 및 데이터 집합의 변경 내용 적용에 대한 내용은 데이터 어댑터 소개를 참조하십시오.

    ' Visual Basic
    <WebMethod> Public Function UpdateAuthors(ByVal authorChanges _
    As authors1) As authors1
       If Not (authorChanges Is Nothing) Then
          SqlDataAdapter1.Update(authorChanges)         
          Return authorChanges
       Else
          Return Nothing
       End If
    End Function
    
    // C#
    [WebMethod]
    public authors1 UpdateAuthors(authors1 authorChanges)
    {
       if (authorChanges != null)
       {
          sqlDataAdapter1.Update(authorChanges);
          return authorChanges;
       }
       else
       {
          return null;
       }
    }
    
    참고   프로덕션 응용 프로그램에서는 이러한 메서드에 오류 검사 및 예외 처리를 추가합니다.
  5. 파일 메뉴에서 모두 저장을 선택합니다.
  6. 빌드 메뉴에서 솔루션 빌드를 선택합니다.

이전 단원에서는 SQL Server 데이터베이스에 바인딩된 데이터 집합을 포함하는 중간 계층 비즈니스 개체를 만들었습니다. 또한 코드를 중간 계층 AuthorsWebService XML Web services에 추가하여 데이터 소스에서 데이터를 가져오고 변경 내용으로 데이터 소스를 업데이트했습니다. 클라이언트는 GetAuthors UpdateAuthors XML Web services 메서드를 통해 이러한 기능에 액세스합니다.

사용자 인터페이스 만들기

데이터 액세스를 위한 중간 계층 비즈니스 개체를 만든 다음 해당 개체를 XML Web services로서 노출한 후에는 다음 단계로 클라이언트 인터페이스를 만듭니다. 이 연습 과정에서는 일반적인 Windows Form과 Web 기반 폼의 두 가지 시나리오가 제공됩니다. 이 예제에서 두 폼은 동일한 솔루션의 개별 프로젝트로 만들어집니다.

Windows 사용자 인터페이스 옵션

Windows 인터페이스는 클라이언트 컴퓨터의 기능을 사용하여 응용 프로그램 처리의 일부를 해결합니다. 일반적으로 Windows 인터페이스를 사용하면 웹 기반 인터페이스를 사용할 때보다 더 나은 기능을 활용하고 보다 다양한 방식으로 작업할 수 있습니다. 또한 서버에서 모든 응용 프로그램 논리를 수행할 필요가 없으므로 웹 프런트 엔드보다 서버의 로드가 낮습니다. 뿐만 아니라 Windows 인터페이스는 파일 시스템 및 레지스트리 호출을 비롯하여 운영 체제를 통해 사용할 수 있는 리소스를 활용할 수 있습니다.

다음 다이어그램에서는 구현하게 되는 클라이언트를 중점적으로 보여 줍니다.

분산 응용 프로그램의 Windows 클라이언트

하나의 Windows Form으로 구성되는 이 Windows 응용 프로그램은 AuthorsWebService에 대한 웹 참조를 포함합니다. 폼에서 로드 단추를 클릭하면 데이터베이스의 데이터가 DataGrid 컨트롤에 표시됩니다. 이 로드 동작은 XML Web services의 GetAuthors 메서드를 호출하여 구현됩니다. DataGrid 컨트롤을 사용하면 직접적으로 편집을 수행할 수 있으며, 데이터 변경 내용은 원본으로 사용하는 데이터 집합으로 직접 전달됩니다. 또한 이 폼에는 저장 단추가 있습니다. 이 단추에 대한 코드는 XML Web services의 UpdateAuthors 메서드를 호출하여 변경 내용을 다시 데이터베이스에 저장합니다.

Windows 응용 프로그램을 만들려면

  1. 파일 메뉴에서 프로젝트 추가를 가리킨 다음 새 프로젝트를 클릭하여 새 프로젝트 추가 대화 상자를 엽니다.
  2. 사용하려는 언어에 따라 프로젝트 형식 창에서 Visual C# 프로젝트 또는 Visual Basic 프로젝트를 선택한 다음 템플릿 창에서 Windows 응용 프로그램을 선택합니다.
  3. 프로젝트의 이름을 AuthorsWinClient로 지정하고 프로젝트의 위치를 선택합니다.

    AuthorsWinClient 프로젝트가 솔루션에 추가됩니다. 프로젝트에 Form1이 자동으로 추가되고 Windows Forms 디자이너에 나타납니다.

  4. 앞에서 만든 ASP.NET 웹 서비스 프로젝트에 대한 참조를 추가합니다.
    1. 솔루션 탐색기에서 AuthorsWinClient 프로젝트를 마우스 오른쪽 단추로 클릭한 다음 바로 가기 메뉴에서 웹 참조 추가를 클릭합니다.
    2. 웹 참조 추가 대화 상자의 맨 위에 있는 URL 상자에 XML Web services 프로젝트의 위치(http://ServerName/AuthorsWebService/AuthorsService.asmx)를 입력한 다음 Enter 키를 누릅니다. 웹 참조를 추가하는 데 문제가 발생하면 웹 참조 추가 대화 상자웹 참조 추가 및 제거를 참조하십시오.
    3. 참조 추가를 클릭합니다.
    4. 이제 해당 응용 프로그램에서 authors1 데이터 집합의 인스턴스를 만들 수 있습니다.

폼에 컨트롤을 추가하려면

  1. 도구 상자의 Windows Forms 탭에서 해당 폼으로 DataGrid 컨트롤을 끌어 옵니다.
  2. 도구 상자의 Windows Forms 탭에서 해당 폼으로 Button 컨트롤을 끌어 옵니다. 단추의 Name 속성을 LoadData로 설정하고 Text 속성을 Load로 설정합니다.
  3. 도구 상자의 Windows Forms 탭에서 해당 폼으로 다른 Button 컨트롤을 끌어 옵니다. 단추의 Name 속성을 SaveData로 설정하고 Text 속성을 Save로 설정합니다.
  4. 도구 상자의 데이터 탭에서 해당 폼으로 DataSet 개체를 끌어 옵니다. 데이터 집합 추가 대화 상자가 나타납니다. 형식화된 데이터 집합을 선택하고 이름 목록에서 "AuthorsWinClient.ServerName.authors1"을 선택합니다. 이렇게 하면 authors1 데이터 집합 클래스 정의에 따라 구성 요소 트레이에 DataSet 개체가 만들어집니다.
  5. DataSet 컨트롤을 선택하고 Name 속성을 AuthorData로 설정합니다.
  6. DataGrid 컨트롤을 선택하고 DataSource 속성 목록에서 AuthorData를 선택합니다. DataMember 속성 목록에서 authors를 선택합니다. DataGrid의 열 머리글이 authors 테이블 열 이름으로 설정됩니다.

LoadData 및 SaveData 단추에 대한 코드를 추가하려면

  1. 보기 메뉴에서 디자이너를 클릭합니다. LoadData 단추를 두 번 클릭하여 Click 이벤트에 대한 빈 이벤트 처리기를 만듭니다. 서비스 클래스의 인스턴스를 만든 다음 서비스 메서드를 호출하여 XML Web services 메서드를 호출합니다. 이 경우 GetAuthors 메서드가 호출됩니다. 반환된 데이터 집합은 AuthorData 데이터 집합에 병합됩니다. XML Web services의 Credentials 속성은 ID를 XML Web services에 전달하는 데 사용됩니다. XML Web services는 이 ID를 다시 데이터베이스 서버에 전달합니다. 아래에 표시된 코드를 해당 메서드에 추가합니다.
    참고   사용자의 로컬 컴퓨터에서 XML Web services가 실행되고 있지 않으면 코드 예제의 localhost를 XML Web services가 실행 중인 서버의 이름으로 바꿔야 합니다.
    ' Visual Basic
    Private Sub LoadData_Click(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles LoadData.Click
       Dim ws As New AuthorsWinClient.localhost.AuthorsService()
       ws.Credentials = System.Net.CredentialCache.DefaultCredentials
       AuthorData.Merge(ws.GetAuthors())
    End Sub
    
    // C#
    private void LoadData_Click(object sender, System.EventArgs e)
    {
       AuthorsWinClient.localhost.AuthorsService ws = 
          new AuthorsWinClient.localhost.AuthorsService();
       ws.Credentials = System.Net.CredentialCache.DefaultCredentials;
       AuthorData.Merge(ws.GetAuthors());
    }
    
  2. 보기 메뉴에서 디자이너를 클릭합니다. SaveData 단추를 두 번 클릭하여 Click 이벤트에 대한 빈 이벤트 처리기를 만듭니다.

    데이터 집합이 변경되었으면 변경된 데이터만 보유하는 authors1 형식의 새로운 데이터 집합이 만들어집니다. 그런 다음 이 데이터 집합은 XML Web services의 UpdateAuthors 메서드로 전달됩니다. 변경 내용이 적용된 데이터 집합이 반환되고 이러한 새로운 변경 내용을 반영하도록 AuthorData 데이터 집합이 업데이트됩니다. 데이터 집합의 변경 내용 적용에 대한 자세한 내용은 데이터 어댑터 소개를 참조하십시오.

    참고   프로덕션 응용 프로그램에서는 이 단계에서 데이터 동시성 문제에 유의하는 것이 좋습니다. 자세한 내용은 ADO.NET의 데이터 동시성 소개를 참조하십시오.

    메서드에 다음 코드를 추가합니다.

    ' Visual Basic
    Private Sub SaveData_Click(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles SaveData.Click
       If AuthorData.HasChanges() Then
          Dim ws As New AuthorsWinClient.localhost.AuthorsService()
          ws.Credentials = System.Net.CredentialCache.DefaultCredentials
          Dim diffAuthors As New AuthorsWinClient.localhost.authors1()
          diffAuthors.Merge(AuthorData.GetChanges())
          diffAuthors = ws.UpdateAuthors(diffAuthors)
          AuthorData.Merge(diffAuthors)
       End If
    End Sub
    
    // C#
    private void SaveData_Click(object sender, System.EventArgs e)
    {
       if (AuthorData.HasChanges())
       {
          AuthorsWinClient.localhost.AuthorsService ws = 
             new AuthorsWinClient.localhost.AuthorsService();
          ws.Credentials = System.Net.CredentialCache.DefaultCredentials;
          AuthorsWinClient.localhost.authors1 diffAuthors 
             = new AuthorsWinClient.localhost.authors1();
          diffAuthors.Merge(AuthorData.GetChanges());
          diffAuthors = ws.UpdateAuthors(diffAuthors);
          AuthorData.Merge(diffAuthors);
       }
    }
    

응용 프로그램을 실행하려면

  1. 파일 메뉴에서 모두 저장을 선택합니다.
  2. 솔루션 탐색기에서 AuthorsWinClient를 선택하고 마우스 오른쪽 단추를 클릭하여 시작 프로젝트로 설정을 선택합니다.
  3. Ctrl+F5를 눌러 응용 프로그램을 실행합니다.

    창이 표시되고 이 창에는 pubs 데이터베이스의 authors 테이블에서 가져온 머리글을 포함하는 빈 테이블이 포함됩니다.

  4. Load를 클릭하여 테이블을 채우고 원하는 내용을 변경한 다음 Save를 클릭하여 변경 내용을 저장합니다.

이전 단원에서는 Windows 인터페이스로 작동할 Windows Forms 프로젝트를 솔루션에 추가했습니다. 그런 다음 첫 번째 단원에서 만든 XML Web services에 해당 Windows Form을 연결하고 DataGridButton 컨트롤을 사용하여 데이터 로드 및 업데이트를 위한 사용자 인터페이스를 만들었습니다. 다음 단원에서는 솔루션을 위한 웹 기반 사용자 인터페이스를 만들게 됩니다.

웹 사용자 인터페이스 옵션

웹 인터페이스를 사용하면 응용 프로그램은 다양한 클라이언트 컴퓨터와 브라우저에 도달할 수 있습니다. 이러한 모든 사용자 인터페이스 처리는 클라이언트가 아니라 웹 서버에서 수행됩니다. 여기서는 Web Forms 페이지를 사용하여 이전 단원에서 만든 Windows 인터페이스와 동일한 중간 계층 비즈니스 개체에 액세스하는 웹 인터페이스를 만듭니다. 다음 다이어그램에서는 구현하게 되는 클라이언트를 중점적으로 보여 줍니다.

분산 응용 프로그램의 웹 클라이언트

Web Forms 응용 프로그램을 만들려면

  1. 파일 메뉴에서 프로젝트 추가를 가리킨 다음 새 프로젝트를 클릭합니다.
  2. 새 프로젝트 추가 대화 상자의 프로젝트 형식 창에서 Visual C# 프로젝트 또는 Visual Basic 프로젝트를 선택한 다음 템플릿 창에서 ASP.NET 웹 응용 프로그램을 클릭합니다.
  3. 위치 상자에 개발 컴퓨터에 있는 웹 서버의 이름과 프로젝트의 이름(http://ServerName/AuthorsWebClient)을 입력한 다음 확인을 클릭합니다.

    솔루션 탐색기에 새 프로젝트가 추가됩니다. WebForm1.aspx라는 Web Forms 페이지가 프로젝트에 추가되고 디자이너에 로드됩니다.

  4. 앞에서 만든 ASP.NET 웹 서비스 프로젝트에 대한 참조를 추가합니다.
    1. 솔루션 탐색기에서 AuthorsWebClient 프로젝트를 마우스 오른쪽 단추로 클릭한 다음 바로 가기 메뉴에서 웹 참조 추가를 클릭합니다.
    2. 웹 참조 추가 대화 상자의 맨 위에 있는 URL 상자에 XML Web services 프로젝트의 위치(http://ServerName/AuthorsWebService/AuthorsService.asmx)를 입력한 다음 Enter 키를 누릅니다.
    3. 참조 추가를 클릭합니다.
    4. 이제 해당 응용 프로그램에서 authors1 데이터 집합의 인스턴스를 만들 수 있습니다.

웹 페이지에 컨트롤을 추가하려면

  1. 도구 상자의 데이터 탭에서 해당 폼으로 DataSet 개체를 끌어 옵니다. 데이터 집합 선택대화 상자가 표시됩니다. 형식화된 데이터 집합을 선택하고 이름 목록에서 "AuthorsWinClient.ServerName.authors1"을 선택합니다. 구성 요소 트레이에 DataSet 개체가 추가됩니다.
  2. DataSet 개체를 선택하고 Name 속성을 AuthorData로 설정합니다.
  3. 도구 상자의 Web Forms 탭에서 해당 폼으로 DataGrid 컨트롤을 끌어 옵니다.
  4. DataGrid 컨트롤의 속성 창에서 DataSource 속성을 AuthorData로 설정하고 DataMember 속성을 authors로 설정합니다. 이러한 설정은 해당 컨트롤의 드롭다운 목록에 나타납니다. DataGrid의 열 머리글은 authors 테이블 열 이름으로 설정됩니다.
  5. DataGrid 컨트롤에서 내부 편집을 지원하려면 편집 단추를 포함하는 편집, 업데이트 취소 열을 추가해야 합니다. 편집 단추를 클릭하면 행의 내용이 텍스트 상자에 표시되고 편집 단추는 업데이트 또는 취소 단추로 바뀝니다. 이 열을 추가하려면 다음 작업을 수행하십시오.
    1. 속성 창 아래의 속성 작성기 링크를 클릭한 다음 대화 상자에서 탭을 선택합니다.
    2. 사용 가능한 열 창에서 단추 열 항목을 확장합니다.
    3. 편집, 업데이트, 취소를 선택하고 추가() 단추를 클릭합니다.
    4. 확인을 클릭합니다.

편집, 업데이트 및 취소 단추의 코드를 추가하려면

  1. 폼을 마우스 오른쪽 단추로 클릭하고 코드 보기를 선택합니다. 아래에 표시된 것처럼 Page_Load 이벤트에 코드를 추가하여 DataGrid 컨트롤을 채웁니다. 이 코드는 XML Web services의 인스턴스를 만들고, AuthorData 데이터 집합을 채운 다음, 데이터 집합을 DataGrid 컨트롤에 바인딩합니다. 해당 페이지가 다시 라운드트립될 때마다 데이터베이스에서 가져온 데이터의 새로운 복사본이 표에 포함됩니다. XML Web services의 Credentials 속성은 ID를 XML Web services에 전달하는 데 사용됩니다. XML Web services는 이 ID를 다시 데이터베이스 서버에 전달합니다.
    참고   이 연습 과정에서는 Web Forms 페이지가 클라이언트 브라우저로 다운로드될 때마다 데이터베이스에서 authors 테이블의 새 복사본이 검색됩니다. 이로 인해 최적화된 성능이 제공되지 못할 수 있습니다. 성능을 최적화할 수 있는 다른 방법에 대한 내용은 웹 데이터 액세스 전략 권장 사항을 참조하십시오.
    ' Visual Basic
    Private Sub Page_Load(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles MyBase.Load
       Dim ws As New AuthorsWebClient.localhost.AuthorsService()
       ws.Credentials = System.Net.CredentialCache.DefaultCredentials
       AuthorData.Merge(ws.GetAuthors())
       If Not Page.IsPostBack Then
          Me.DataGrid1.DataBind()
       End If
    End Sub
    
    // C#
    private void Page_Load(object sender, System.EventArgs e)
    {
       AuthorsWebClient.localhost.AuthorsService ws = 
          new AuthorsWebClient.localhost.AuthorsService();
       ws.Credentials = System.Net.CredentialCache.DefaultCredentials;
       AuthorData.Merge(ws.GetAuthors());
       if (! Page.IsPostBack) 
       {
          DataGrid1.DataBind();
       }
    }
    
  2. Edit 단추를 클릭하면 DataGrid 컨트롤의 EditCommand 이벤트가 발생합니다. 이 이벤트를 사용하여 DataGrid 컨트롤의 EditItemIndex 속성을 변경합니다. EditItemIndex 속성에서 지정한 행이 표시되며 텍스트 상자에는 모든 데이터가 표시됩니다.
    1. EditCommand 이벤트에 대한 이벤트 처리기를 만듭니다.

      Visual Basic에서 해당 페이지를 마우스 오른쪽 단추로 클릭하고 코드 보기를 선택합니다. 코드 편집기의 왼쪽 드롭다운 상자에서 DataGrid1을 선택하고, 오른쪽 드롭다운 상자에서 EditCommand를 선택합니다.

      - 또는 -

      Visual C#에서 DataGrid1 컨트롤을 클릭합니다. 속성 창에서 이벤트 단추를 클릭하여 DataGrid 이벤트의 목록을 표시합니다. EditCommand 이벤트를 두 번 클릭합니다.

    2. 아래와 같이 코드를 추가합니다.
      ' Visual Basic
      Private Sub DataGrid1_EditCommand(ByVal source As Object, _
      ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) _
      Handles DataGrid1.EditCommand
         DataGrid1.EditItemIndex = e.Item.ItemIndex
         DataGrid1.DataBind()
      End Sub
      
      // C#
      private void DataGrid1_EditCommand(object source, 
      System.Web.UI.WebControls.DataGridCommandEventArgs e)
      {
         DataGrid1.EditItemIndex = e.Item.ItemIndex;
         DataGrid1.DataBind();
      }
      
  3. CancelCommand 이벤트에 대한 이벤트 처리기를 만듭니다. 이벤트 처리기를 추가하려면 2단계를 참조하십시오.

    Cancel 단추를 클릭하면 DataGrid 컨트롤의 CancelCommand 이벤트가 발생합니다. 현재 행이 다시 텍스트로 표시되도록 이 이벤트를 사용하여 EditItemIndex 속성을 –1로 설정합니다. 아래와 같이 코드를 추가합니다.

    ' Visual Basic
    Private Sub DataGrid1_CancelCommand(ByVal source As Object, _
    ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) _
    Handles DataGrid1.CancelCommand
       DataGrid1.EditItemIndex = -1
       DataGrid1.DataBind()
    End Sub
    
    // C#
    private void DataGrid1_CancelCommand(object source, 
    System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {
       DataGrid1.EditItemIndex = -1;
       DataGrid1.DataBind();
    }
    
  4. Update 단추를 클릭하면 DataGrid 컨트롤의 UpdateCommand 이벤트가 발생합니다. 이 메서드는 DataGrid 컨트롤 변경 내용으로 AuthorData 데이터 집합을 업데이트하고 해당 변경 내용을 XML Web services를 통해 데이터베이스에 다시 전파합니다. UpdateCommand 이벤트에 대한 이벤트 처리기를 만듭니다. 이벤트 처리기를 추가하려면 2단계를 참조하십시오. 아래와 같이 코드를 추가합니다.
    ' Visual Basic
    Private Sub DataGrid1_UpdateCommand(ByVal source As Object, _
    ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) _
    Handles DataGrid1.UpdateCommand
       ' update each of the fields in the dataset row
       Dim i As Integer
       For i = 1 To AuthorData.authors.Columns.Count
          ' Controls(0) returns a Control object, so it must be cast 
          ' to TextBox.
          Dim t As TextBox = CType(e.Item.Cells(i).Controls(0), TextBox)
          Dim row As DataRow = AuthorData.authors(e.Item.DataSetIndex)
          row(AuthorData.authors.Columns(i - 1).Caption) = t.Text
       Next
       ' Update the database.
       If Me.AuthorData.HasChanges() Then
          Dim ws As New AuthorsWebClient.localhost.AuthorsService()
          ws.Credentials = System.Net.CredentialCache.DefaultCredentials
          Dim diffAuthors As New AuthorsWebClient.localhost.authors1()
          diffAuthors.Merge(Me.AuthorData.GetChanges())
          ws.UpdateAuthors(diffAuthors)
          AuthorData.Merge(diffAuthors)
       End If
       ' Take the row out of edit mode and display the new data.
       DataGrid1.EditItemIndex = -1
       DataGrid1.DataBind()
    End Sub
    
    // C#
    private void DataGrid1_UpdateCommand(object source, 
    System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {
       // Change the data in the dataset.
       for (int i=1; i <= AuthorData.authors.Columns.Count; i++) 
       {
          TextBox t = (TextBox)(e.Item.Cells[i].Controls[0]);
          DataRow row = AuthorData.authors[e.Item.DataSetIndex];
          row[AuthorData.authors.Columns[i-1].Caption] = t.Text;
       }
       
       // Update the database.
       if (AuthorData.HasChanges()) 
       {
          AuthorsWebClient.localhost.AuthorsService ws = 
             new AuthorsWebClient.localhost.AuthorsService();
          ws.Credentials = System.Net.CredentialCache.DefaultCredentials;
          AuthorsWebClient.localhost.authors1 diffAuthors = 
             new AuthorsWebClient.localhost.authors1();
          diffAuthors.Merge(AuthorData.GetChanges());
          ws.UpdateAuthors(diffAuthors);
          AuthorData.Merge(diffAuthors);
       }
       DataGrid1.EditItemIndex = -1;
       DataGrid1.DataBind();
    }
    

통합 보안을 사용하여 작업하려면 프로젝트의 보안 설정을 구성해야 합니다. 익명 액세스를 해제하고 개인 액세스를 설정하면 됩니다. 자세한 내용은 보안 모델을 참조하십시오.

Windows 통합 인증을 구성하려면

프로젝트의 Windows 통합 인증을 구성하려면 인터넷 정보 서비스 도구를 사용하여 프로젝트 파일을 변경하고 프로젝트를 구성해야 합니다.

  1. 인터넷 정보 서비스 도구를 시작합니다. 제어판관리 도구에서 실행할 수 있습니다. 이 도구를 시작하는 방법에 대한 자세한 내용은 Windows 도움말 문서를 참조하십시오. 서버의 노드를 확장합니다.
  2. 기본 웹 사이트 노드를 확장합니다.
  3. AuthorsWebClient의 노드를 마우스 오른쪽 단추로 클릭하고 바로 가기 메뉴에서 속성을 선택합니다.
  4. 디렉터리 보안 탭을 클릭합니다.
  5. 익명 액세스 및 인증 제어 섹션에서 편집 단추를 클릭합니다.
  6. 익명 액세스 확인란의 선택을 취소합니다.
  7. Windows 통합 인증 확인란을 선택합니다. XML Web services 디렉터리가 구성되었습니다.
  8. Visual Studio의 프로젝트로 돌아가 솔루션 탐색기에서 Web.config 파일을 두 번 클릭합니다.
  9. <system.web> 태그 뒤에 있는 줄에 다음 태그를 추가하여 XML Web services의 통합 보안을 구성합니다.
    <identity impersonate="true"/>
    

응용 프로그램을 실행하려면

  1. 솔루션 탐색기에서 AuthorsWebClient를 선택하고 마우스 오른쪽 단추를 클릭하여 시작 프로젝트로 설정을 선택합니다.
  2. Ctrl+F5를 눌러 응용 프로그램을 실행합니다.

이 단원에서는 데이터에 대한 브라우저 인터페이스로 작동하는 ASP.NET 웹 응용 프로그램 프로젝트를 솔루션에 추가했습니다. 그런 다음 첫 번째 단원에서 만든 XML Web services에 해당 Web Forms를 연결하고 DataGrid 컨트롤을 사용하여 데이터 표시 및 편집을 위한 사용자 인테페이스를 만들었습니다.

솔루션 배포 또는 다른 기능 추가

이제 응용 프로그램을 배포하거나 필요한 경우 프로그램에 다른 기능을 추가할 수 있습니다. 이 때 다음과 같은 몇 가지 제안 사항을 고려해야 합니다.

  • 솔루션 배포

    서버에 웹 응용 프로그램을 배포하거나 Windows 응용 프로그램의 설치 프로젝트를 만들 수 있습니다. 웹 응용 프로그램 배포에 대한 내용은 연습: 웹 솔루션 배포를 참조하고 Windows 응용 프로그램 배포에 대한 내용은 연습: Windows 응용 프로그램 배포를 참조하십시오.

  • 인터넷 웹 액세스 지원

    이 연습에서는 인트라넷 웹 응용 프로그램의 인증에 대해 설명합니다. 인터넷을 통해 다른 사용자가 응용 프로그램에 액세스할 수도 있으므로 다른 인증 솔루션이 필요합니다. 자세한 내용은 IIS 인증웹 응용 프로그램에 대한 액세스 권한을 참조하십시오.

  • 레코드 추가 또는 삭제 지원

    레코드를 추가 및 삭제할 수도 있지만 이 연습에서는 데이터베이스의 레코드를 표시하고 업데이트하는 기능에 대해서만 설명합니다. 추가 및 삭제 기능은 Windows Forms DataGrid 컨트롤에서는 지원되지만 DataGrid 웹 서버 컨트롤에서는 기본적으로 지원되지 않습니다. 자세한 내용은 사용자가 DataGrid 웹 서버 컨트롤의 항목을 삭제하도록 허용데이터 집합에서 레코드 업데이트, 삽입 및 삭제를 참조하십시오.

  • 보안 고려

    이 연습에서는 Windows 통합 인증을 사용하여 데이터베이스에 대한 액세스를 제어합니다. 웹 응용 프로그램에서는 데이터베이스 보안을 고려해야 합니다. 웹 응용 프로그램 보안에 대한 자세한 내용은 웹 응용 프로그램에 대한 기본 보안 연습을 참조하십시오.

참고 항목

XML Web services를 사용한 웹 프로그래밍 | Web Forms 페이지 | Windows Forms | 관리되는 코드의 XML Web services | 분산 응용 프로그램 및 데이터 통합 소개 | 분산 응용 프로그램에서 엔터프라이즈 템플릿 시작

Microsoft는 MSDN 웹 사이트에 대한 귀하의 의견을 이해하기 위해 온라인 설문 조사를 진행하고 있습니다. 참여하도록 선택하시면 MSDN 웹 사이트에서 나가실 때 온라인 설문 조사가 표시됩니다.

참여하시겠습니까?
표시:
© 2015 Microsoft