Share via


클라이언트 응용 프로그램에 SOAP 추적 지원 추가

Microsoft SQL Server의 이후 버전에서는 이 기능이 제거됩니다. 새 개발 작업에서는 이 기능을 사용하지 않도록 하고, 현재 이 기능을 사용하는 응용 프로그램은 수정하십시오.

SQL Server에서 네이티브 XML 웹 서비스용 웹 클라이언트 응용 프로그램을 개발할 경우 SQL Server 인스턴스와 클라이언트 응용 프로그램 간에 교환되는 SOAP 메시지를 추적하고 관찰하는 기능은 문제 해결에 매우 유용합니다.

이 항목에서 다루는 예제 클래스 라이브러리는 Visual Studio 2005에서 클라이언트 응용 프로그램 프로젝트의 SOAP 추적을 지원하는 SOAP 확장 헤더를 구현합니다. 프로젝트와 SOAP 확장을 통합하여 SOAP 요청 및 응답 메시지의 실제 내용을 추적하고 표시할 수 있습니다.

기존 Visual Studio 2005 SOAP 클라이언트 프로젝트에 대해 이 라이브러리를 추가할 수 있습니다. 여기에는 네이티브 HTTP SOAP 요청을 보내기 위한 예제 응용 프로그램에서 제공하는 예제 응용 프로그램도 포함됩니다. 서버를 설정하여 네이티브 XML 웹 서비스 요청 수신클라이언트 응용 프로그램 작성에서 제공하는 개념 및 절차 정보를 알아 두는 것이 좋습니다.

SOAP 메시지 형식에 익숙하지 않을 경우 다음 항목을 참조하십시오.

[!참고]

다음 절차에서는 Visual Studio 2005를 사용하여 기존 SOAP 클라이언트 응용 프로그램을 만들었으며 Visual Studio 2005 클라이언트(C#)를 사용하여 SOAP 요청 보내기에 설명된 것처럼 SQL Server를 사용하여 만든 HTTP SOAP 끝점에 웹 참조를 추가했다고 가정합니다.

Visual Studio 프로젝트에 SOAP 추적 예제 라이브러리를 추가하려면

  1. SQL SOAP 추적 예제 클래스 라이브러리에 대한 C# 코드 목록의 내용을 복사하여 메모장에 붙여 넣고 SOAP 클라이언트 프로젝트 파일이 있는 폴더에 "SqlSoapTracer.cs"라는 이름으로 저장합니다.

  2. 클라이언트 컴퓨터의 Microsoft Visual Studio 2005 프로그램 그룹에서 Microsoft Visual Studio 2005를 시작합니다.

  3. 프로젝트 열기를 클릭합니다.

  4. SOAP 클라이언트 프로젝트 파일(.csproj)을 찾아 선택합니다.

  5. 솔루션 탐색기 창에서 다음 단계를 수행합니다.

    1. 프로젝트 이름을 선택하고 마우스 오른쪽 단추로 클릭한 다음 추가를 가리키고 기존 항목 추가를 선택합니다.

    2. 기존 항목 추가 대화 상자에서 1단계에서 저장한 위치의 SqlSoapTracer.cs 파일을 찾아 선택합니다.

    3. 모든 파일 표시를 선택하고 Web References 노드를 확장한 다음 Reference.cs 파일을 선택합니다.

  6. 코드 편집기 창에서 웹 메서드의 진입점을 찾아 Reference.cs 파일을 업데이트합니다.

    예를 들어 Visual Studio 2005 클라이언트(C#)를 사용하여 SOAP 요청 보내기에서 제공하는 예제 프로젝트에 SOAP 추적 지원을 추가할 경우 해당 프로젝트에 포함된 다양한 웹 메서드에 대한 게시된 웹 메서드 진입점이 다음과 같이 나타납니다.

    public object[] GetCustomerInfo([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] System.Data.SqlTypes.SqlString CustomerID, [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] ref System.Data.SqlTypes.SqlString OutputParam) {
                object[] results = this.Invoke("s2MsgGetCustomerInfoSoapIn", new object[] {
                            CustomerID,
                            OutputParam});
                OutputParam = ((System.Data.SqlTypes.SqlString)(results[1]));
                return ((object[])(results[0]));
            }
    
    ...
    
    public System.Data.SqlTypes.SqlInt32 UDFReturningAScalar() {
                object[] results = this.Invoke("s1MsgUDFReturningAScalarSoapIn", new object[0]);
                return ((System.Data.SqlTypes.SqlInt32)(results[0]));
            }
    
  7. 클라이언트 코드에서 웹 메서드가 실행될 때 SOAP 추적 지원을 추가하려면 다음 코드 줄과 같이 Reference.cs에서 추적할 각 웹 메서드에 대한 진입점 바로 앞에 다음 snoopattribute() 호출을 추가합니다.

    [snoopattribute()]
    public object[] GetCustomerInfo(...) {...}
    ...
    [snoopattribute()]
    public System.Data.SqlTypes.SqlInt32 UDFReturningAScalar() {...}
    

    이렇게 하면 웹 메서드가 실행될 때 SOAP 추적을 호출하는 SOAP 확장이 등록됩니다.

SOAP 추적 지원을 사용하여 응용 프로그램 테스트

Visual Studio 개발 환경에서 SOAP 클라이언트 응용 프로그램을 실행할 때 위의 코드에서 제공하는 SOAP 추적 지원 확장을 사용하려면 다음 단계를 수행해야 합니다.

  1. SQL Server Management Studio나 osql 명령 유틸리티를 사용하여 진입점에서 테스트할 저장 프로시저나 사용자 정의 함수를 표시하도록 웹 메서드를 추가합니다.

    자세한 내용은 웹에 SQL 프로그래밍 기능 제공을 참조하십시오.

  2. Visual Studio에서 SOAP 클라이언트 응용 프로그램 프로젝트를 코딩, 디버그 및 빌드합니다.

    Visual Studio 2005 클라이언트(C#)를 사용하여 SOAP 요청 보내기에서 제공하는 예제 프로젝트를 사용할 수도 있습니다.

  3. 앞 섹션에서 설명한 것처럼 프로젝트에 SqlSoapTracer.cs 클래스를 추가합니다.

  4. Visual Studio 개발 환경에서 클라이언트 응용 프로그램을 저장, 빌드 및 실행합니다.

    응용 프로그램을 실행하면 Windows 클립보드 뷰어 개체가 생성됩니다. 3단계에서 추적하도록 설정한 웹 메서드가 실행되면 이 뷰어 개체에서 각 웹 메서드에 대해 다음을 표시합니다.

    • 클라이언트 코드에서 생성되는 SOAP 클라이언트 요청 메시지

    • SQL Server용 네이티브 XML 웹 서비스에서 반환되는 SOAP 서버 응답 메시지

    추적이 수행된 후 클립보드의 내용을 보려면 메모장에 현재 Windows 클립보드 내용을 붙여넣습니다.

SOAP 추적 지원 작동 방식

추적 메커니즘에는 SQL Server의 네이티브 XML 웹 서비스 구현 방식의 일부인 미리 정의된 콜백과 이벤트가 사용됩니다. 여기에는 BeforeSerialize와 AfterSerialize라는 두 가지 이벤트가 포함됩니다.

이러한 이벤트와 콜백을 통해 서버의 SOAP 요청과 해당 SOAP 응답이 트래핑되고 출력 스트림으로 리디렉션됩니다. 제공된 코드에서는 출력이 System.Windows.Forms.Clipboard 개체로 리디렉션됩니다. Clipboard 개체는 snoopattribute() 호출 바로 다음에 웹 메서드를 실행하여 교환되는 SOAP 클라이언트 요청 메시지와 서버 응답 메시지를 받고 표시합니다.

클라이언트 요청의 출력과 이에 대한 SQL Server의 응답은 SOAP 요청 메시지 구조SOAP 응답 메시지 구조와 유사한 형식으로 나타납니다. 응답에는 웹 메서드가 성공적으로 실행된 경우의 직렬화된 XML 출력을 비롯하여 서버에서 생성되는 모든 결과가 나타납니다. 오류가 발생하는 경우 서버에서 반환하는 응답에는 직렬화된 XML 출력 대신 SOAP 오류 메시지 구조가 나타납니다.