네이티브 XML 웹 서비스 요청 보내기 예제 응용 프로그램

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

다음 작업 예제에서는 SOAP 요청을 보내고 응답을 처리하는 방법을 보여 줍니다. 예제에는 Visual Studio 2005 클라이언트, C# 및 Visual Basic이 포함됩니다.

초기 설치

모든 예제 응용 프로그램에는 공통된 설치 과정이 필요하며 설치 단계는 다음과 같습니다.

  1. 예제 저장 프로시저를 만듭니다.

  2. 사용자 정의 함수를 만듭니다.

  3. HTTP SOAP 끝점을 만듭니다.

[!참고]

AdventureWorks2008R2 예제 데이터베이스에서 이러한 개체를 만들려면 SQL Server Management Studio 또는 osql 명령 유틸리티를 사용합니다. AdventureWorks2008R2 예제 데이터베이스를 설치하는 방법은 SQL Server 예제 및 예제 데이터베이스 설치 시 고려 사항을 참조하십시오.

저장 프로시저(GetCustomerInfo) 만들기

다음 저장 프로시저는 클라이언트 응용 프로그램에서 입력 및 출력 매개 변수, 반환 코드, 쿼리 결과 및 오류 발생 시 오류를 처리하는 방법을 보여 줍니다.

USE AdventureWorks2008R2;
GO
DROP PROCEDURE GetCustomerInfo;
GO
CREATE PROCEDURE GetCustomerInfo
                    @CustomerID nchar(5),
                    @OutputParam nchar(5) OUTPUT 
AS  

  SELECT @OutputParam = '99999'  
  -- The following INSERT should fail, and an-error returned 
  -- to the client.
  INSERT Store (CustomerID) VALUES (1)

 -- Execute a SELECT statement.
 SELECT top 3 SalesOrderID, OrderDate 
 FROM   Sales.SalesOrderHeader
 WHERE  CustomerID = @CustomerID

 -- Execute SELECT returning XML.
  SELECT CustomerID, SalesOrderID, OrderDate 
  FROM   Sales.SalesOrderHeader
  WHERE  CustomerID = @CustomerID
  for xml auto, XMLSCHEMA

  PRINT 'Hello World'
RETURN 0;
Go

이 저장 프로시저에서는 입력 매개 변수(CustomerID)와 출력 매개 변수(OutParam)의 두 가지 매개 변수를 통해 매개 변수를 전달하는 방법을 보여 줍니다.

이 저장 프로시저에서는 다음과 같은 문을 실행합니다.

  • 의도적으로 실패하여 오류를 반환하는 INSERT 문. 의도적인 오류를 통해 SOAP 응답에서 오류를 반환하는 방식을 보여 줍니다. Visual Studio 2005에서 오류는 SqlMessage 개체로 반환됩니다.

  • SELECT 문. Visual Studio 2005에서 결과 행 집합은 DataSet 개체로 반환됩니다.

  • XML 데이터를 반환하는 SELECT FOR XML 쿼리. Visual Studio 2005에서 결과 행 집합은 SqlXml 개체로 반환됩니다.

  • PRINT 문. Visual Studio 2005에서 이 문의 결과는 SqlMessage 개체로 반환됩니다.

사용자 정의 함수(UDFREturningAScalar) 만들기

이 함수는 정수 값을 반환합니다.

USE AdventureWorks2008R2;
GO
CREATE FUNCTION UDFReturningAScalar() 
RETURNS int
AS
BEGIN
   RETURN 555
END;
Go

HTTP SOAP 끝점(sql_endpoint) 만들기

이 끝점은 저장 프로시저와 사용자 정의 함수를 웹 메서드로 표시하며 임시 쿼리를 허용하도록 구성됩니다. 클라이언트 응용 프로그램에서는 임시 쿼리를 위한 SOAP 요청을 끝점으로 보낼 수 있습니다.

끝점의 HTTP 네임 스페이스(sp_reserve_http_namespace)를 예약하고 SITE 매개 변수를 완성할 때 서버 이름을 hostname 값으로 제공해야 합니다. 또한 해당되는 경우 port 값이 "80" 또는 다른 TCP 포트 번호 등의 SQL Server 인스턴스가 사용하는 HTTP 포트와 일치해야 합니다.

USE AdventureWorks2008R2;
GO
DROP ENDPOINT sql_endpoint;
GO
EXEC sp_reserve_http_namespace N'http://hostname:port/sql' ;
-- EXEC sp_reserve_http_namespace N'https://www.microsoft.com:80/sql' for example
GO
CREATE ENDPOINT sql_endpoint 
   STATE = STARTED
AS HTTP(
   PATH = '/sql', 
   AUTHENTICATION = (INTEGRATED ), 
   PORTS = ( CLEAR ),
   SITE = 'server'
)
FOR SOAP (
   WEBMETHOD 'http://tempUri.org/'.'GetCustomerInfo' 
            (name='AdventureWorks2008R2.dbo.GetCustomerInfo', 
             schema=STANDARD ),
   WEBMETHOD 'UDFReturningAScalar' 
            (name='AdventureWorks2008R2.dbo.UDFReturningAScalar'),
   BATCHES = ENABLED,
   WSDL = DEFAULT,
   DATABASE = 'AdventureWorks2008R2',
   NAMESPACE = 'http://Adventure-Works/Customers'
);
GO
USE master;
EXEC sp_grantlogin @loginame='domain\userOrGroup';
EXEC sp_grantdbaccess @loginame='domain\userOrGroup';
GRANT CONNECT ON ENDPOINT::sql_endpoint TO [domain\userOrGroup];
GO

위의 코드에서는 다음에 유의하십시오.

  • 끝점을 만들기 위해 두 가지 웹 메서드가 정의되어 있습니다.

  • WSDL 값이 DEFAULT로 설정됩니다. 따라서 클라이언트에서 서버로 WSDL 응답을 요청할 수 있습니다.

  • BATCHES 값이 ENABLED로 설정됩니다. 따라서 클라이언트에서 끝점으로 임시 쿼리 요청을 보낼 수 있습니다.

  • UDFReturningAScalar 웹 메서드는 선택적인 네임 스페이스를 지정하지 않고 NAMESPACE 값에 지정된 네임 스페이스를 사용합니다.

  • SQL Server 로그인으로 생성된 domain\userOrGroup 값은 HTTP 끝점에 액세스해야 하는 실제 도메인 사용자나 그룹으로 설정되어야 합니다.