본문 바로가기

MSSQL

SQL Server 2005 개발자 가이드[7/13]


웹서비스와 네이티브 HTTP 지원

서비스 지향 기술구조(SOA)를 기반으로, SQL Server 2005에서는 네이티브 HTTP를 사용하여 직접 SOAP 기반으로 웹서비스를 게시하는 기능을 제공합니다. 웹 서비스의 개념과 SQL Server 2005를 통해 데이터베이스 어플리케이션에서 네이티브 HTTP 기능을 사용하는 방법에 대해서 살펴 봅니다. SQL Server 2005의 네이티브 HTTP 지원기능을 통해 산업표준통신 메커니즘에 근거하여 최소한의 노력을 투자하여 데이터베이스와 통신할 수 있도록 설정할 수 있습니다.

웹서비스와 SOAP이란?
웹 서비스와 SOAP은 분산 어플리케이션 개발 모델의 단점을 보완하는 웹 표준입니다.

웹 서비스
웹 서비스는 인터넷 또는 인트라넷을 통해 접근이 가능한 프로그래밍 가능한 로직을 제공하며, 분산 어플리케이션을 개발하기 위한 빌딩블럭의 역할을 수행합니다. 웹 서비스는 블랙박스의 개념으로, 내부에 구현이 캡슐화되며, 웹서비스 간에 통신을 위한 인터페이스를 제공합니다.

웹서비스를 사용하는 장점
    상호운영성. 웹 서비스는 HTTP와 XML을 사용하여 통신하기 때문에, HTTP와 XML을 지원하는
       모든 네트워크 노드에서 웹 서비스를 호스팅할 수 있고, 웹 서비스를 사용할 수 있습니다.
    다중 언어 지원. 개발자는 어떤 개발언어로도 웹 서비스를 개발할 수 있습니다.
    기존 어플리케이션 재사용. 기존 컴포넌트와 라이브러리를 간단하게 웹서비스로 제공할 수 있습
       니다. 기존 회사에 보유하고 있는 기존 컴포넌트, 라이브러리, 어플리케이션은 상당히 많습니다.
       이러한 기존 자원을 다시 구현할 필요없이 소프트웨어 자원의 기능을 재사용할 수 있기 때문에
       비용을 절약할 수 있습니다.
    산업표준사용. HTTP, XML, SOAP과 같은, 웹서비스 관련 기술은 거의 모든 벤더에서 지원하고
       있습니다. 산업표준을 사용함으로써 이기종 시스템간에 통신을 좀 더 쉽게 처리할 수 있습니다.

SOAP
SOAP은 분산환경에서 분산되어 있는 정보를 교환하기 위한 프로토콜입니다. SOAP 메시지를 교환하는 방법을 통해, 웹 서비스간에 통신을 처리할 수 있습니다.

SOAP 메시지는 헤더와 본문으로 구성된 XML 문서입니다. 기본적으로 SOAP 메시지는 송신자(sender)에서 수신자(receiver)에게 보내는 단방향 전문입니다. SOAP에는 프로그램 모델, 구현상세정보 등과 같은 어플리케이션 정보에 대해서는 정의하지 않습니다 그러므로, 웹 서비스는 HTTP 요청 및 응답 체계안에 SOAP 메시지를 보내는 요청/응답 모델을 사용합니다.

웹 서비스 예제
웹서비스를 기반으로 웹 사이트의 기능을 제공할 수 있습니다. 여행사 웹 사이트 시나리오 에서, 사용자가 웹 페이지에 여행지에 대한 도시명을 입력합니다. 해당 페이지에서는 지정된 도시명을 매개변수로 SOAP을 사용하여 웹 서비스를 호출합니다. 웹 서비스에서는 여행지 도시에 대한 기상정보, 환율 등과 같은, 해당 페이지에 필요한 정보를, SOAP 메시지형태로 반환합니다. 웹 페이지에서는 해당 반환값을 필요한 형식으로 전환하여 사용자에게 보여주면 됩니다.

사용자 관점에서는, 필요한 정보를 해당 웹 사이트에서 충분하게 제공받을 수 있다는 장점이 있습니다. 코드를 작성하는 개발자 관점에서는, 웹 사이트를 개발하기 위해 다른 업체에서 제공하는 웹 서비스를 조합하는 적은 노력만을 투자하고, 웹 사이트의 그래픽 인터페이스에 대해서 좀 더 많은 투자를 하여 사용자에게 좀 더 양질의 웹사이트를 제공할 수 있습니다.
네이티브 HTTP 지원
SQL Server 2005에서는 네이티브 HTTP 기능을 지원하기 때문에, 웹서비스를 사용하여 프로그래밍 기반으로 인터넷이나 내부 방화벽을 통과하여 데이터베이스에 작업을 수행할 수 있습니다. 네이티브 HTTP 지원기능을 통해, 개발자는 인터넷을 통한 데이터 처리 작업을 개발하기 위한 노력을 절감할 수 있습니다.

데이터베이스 개체 노출
특정 데이터베이스 개체를 선택하여 웹서비스로 노출시킬 수 있습니다. 클라이언트 어플리케이션에서는 웹서비스로 노출된 개체에 대해서만 접근이 가능합니다. 다음과 같은 개체를 웹서비스를 노출시킬 수 있습니다.

    저장 프로시저. 사용자 저장 프로시저(.NET CLR 기반으로 작성한 저장 프로시저 포함)나 확장
       저장 프로시저를 웹 서비스로 노출시킬 수 있습니다. 저장 프로시저는 매개변수를 전달받아 결과
       값을 반환할 수도 있고, 결과정보의 반환없이 특정한 기능을 수행하도록 처리할 수도 있습니다.

    사용자정의함수. 스칼라 값을 반환하는 사용자정의함수를 웹서비스로 노출시킬 수 있으며, 사용
       자정의함수에서는 매개변수를 전달받을 수 있습니다.

    T-SQL 배치문장. 임의 T-SQL 배치문장을 웹서비스의 특정 메서드로 노출시킬 수 있습니다.
       SQL Server 에서는 클라이언트 어플리케이션에 해당 임의 쿼리 문장을 실행할 사용권한만 부여
       하게 됩니다.

또한, HTTP 엔드포인트는 Service Broker 서비스에 대한 원적 접근을 위해서도 사용됩니다.

보안
SQL Server 에서는 웹 서비스로 노출된 저장 프로시저, 사용자정의 함수, T-SQL 배치 문장을 실행하기 전에, 해당 클라이언트 어플리케이션에 대한 인증 신임장을 체크하여 보안 사용권한이 부여되었는지를 체크합니다. SQL Server 내에서 웹 서비스 보안에 대한 관리를 수행할 수 있습니다.
네이티브 HTTP를 사용하는 이유
이기종 데이터 액세스
비즈니스 환경에서는 동일한 데이터에 서로 다른 다수의 클라이언트 어플리케이션이 접근 상황이 자주 발생합니다. 각 어플리케이션은 Windows Form 기반, Web 기반, 배치 처리를 위한 콘솔 기반 등 여러 가지 형태로 개발됩니다. 또한 각 어플리케이션의 개발 언어도 서로 다를 수 있으며, 데이터에 접근하기 위한 매커니즘도, OLE DB, ODBC, 사용자정의 데이터접근 매커니즘 등 다양할 수 있습니다.

이러한 상황에서 데이터에 접근하기 위한 방법으로 웹 서비스를 사용할 수 잇습니다. 웹 서비스는 프로그래밍 언어나 운영체제 시스템과 독립적이기 때문에, XML 및 HTTP 네트워크 연결을 지원하기만 하면, 어떤 클라이언트 어플리케이션에서도 작업을 수행할 수 있습니다. 모바일 장비부터, 메인 프레임까지, Java, Visual Basic.NET, 또는 다른 프로그래밍 언어로 개발된 모든 어플리케이션에 웹서비스가 사용될 수 있습니다.

방화벽 포트 오픈 최소화
웹 어플리케이션에서 SQL Server 로 접근해야 하는 경우, 일반적으로, 관리자가 웹서버에서 데이터베이스로 접근할 수 있도록 하기 위해 내부 방화벽에 추가 포트를 오픈하게 됩니다. 웹 서비스를 사용하여 데이터베이스 접근하면, 표준 HTTP 통신을 허용하기 위한 내부 방화벽에 대한 포트만 오픈하면 됩니다.
네이티브 HTTP 기술구조
SQL Server 2005에서 지원하는 네이티브 HTTP 기능을 사용하기 위해서는 먼저 기초적인 기술구조에 대해서 이해해야 합니다. 기술구조를 이해함으으로써, 설치에 대한 요구조건을 확인할 수 있고, 클라이언트와 통신하기 위한 다양한 개체의 역할에 대해서도 이해할 수 있습니다.

 
네이티브 HTTP 지원 구성
네이티브 HTTP 지원 기능을 구성하기 위해서, 반드시 생성해야 하는 SQL Server 개체가 추가되었습니다. 운영 환경에서는 HTTP 엔드포인트를 생성하고, 반드시 보안을 보장할 수 있도록 관리해야 합니다. 또한 URL 네임스페이스를 예약해야 합니다.

HTTP 엔드포인트 생성
웹 서비스로 SQL Server 2005 에 접근하기 위해서는, 웹 서비스 정보를 지정하기 위한 서비스 정보를 지정하기 위한 HTTP 엔드포인트를 생성해야 합니다.

HTTP 엔드포인트를 생성하기 위해서는, 다음과 같은 단계에 따라, CREATE ENDPOINT 명령을 수행하면 됩니다.

1. 전송 프로토콜 정보 지정
CREATE ENDPOINT의 처음 부분에서 전송 프로토콜 정보를 지정합니다. 전송 프로토콜 정보에는 수신 포트, 인증 방법 등에 대한 정보가 포함됩니다.

다음의 표는 CREATE ENDPOINT 명령에서 지정할 수 있는 전송 프로토콜 관련 매개변수의 목록입니다.
매개변수 설명
endPointName HTTP 엔드포인트를 수정하거나 삭제할 때 사용하기 위한 엔드 포인트 명
AUTHORIZATION 엔드포인트에 대한 소유권할당. 로그온을 지정하지 않으면, 문장을 실행하는 사용자가 소유자가 됩니다.
STATE 엔드포인트를 생성하자마자 요청을 수신할 것인지 여부를 지정합니다. 기본값은 엔드포인트를 생성한 다음 바로 요청을 수신하지 않는 것입니다.
AS 사용할 전송 프로토콜을 지정. 기본값은 HTTP 프로토콜.
FOR 페이로드(payload) 유형을 지정합니다.
PATH SITE 매개변수로 지정된 호스트 컴퓨터에서 엔드포인트의 위치를 지정하기 위한 URL 경로
PORTS 엔드포인트에 표준 포트로 수신할 것인지, SSL 포트로 수신할 것인지, 양쪽 포트 모두로 수신할 것인지를 지정합니다.
SITE 수신할 호스트 컴퓨터의 이름을 지정. (+) 부호를 사용하여, 컴퓨터에 대한 가능한 모든 호스트명에 대해 수신하도록 지정할 수 있습니다. 또는, (*) 부호를 사용하여, 현재 예약되지 않는 컴퓨터에 대한 모든 가능한 호스트명에 대해서 수신하도록 지정할 수 있습니다. 기본값은 (*) 부호입니다.
CLEAR_PORT 표준 포트 통신을 위한 포트번호를 지정.(기본값은 80)
SSL_PORT SSL 통신을 위한 포트번호를 지정.(기본값은 433). SSL에 필요한 디지털 인증서는 sp_register_ssl certificate_for_http 저장 프로시저를 사용하여,“ 내(My)”인증서 저장소에 등록할 수 있습니다.
AUTHENTICATION 클라이언트 어플리케이션에서 웹 서비스를 호출할 때 사용할 인증방식을 지정합니다. ANONYMOUS, BASIC, DIGEST, INTEGRATED 로 정의할 수 있습니다.
AUTH_REALM /
DEFAULT
_LOGON_DOMAIN
인증 처리절차에 대한 기본 정보를 지정합니다. DIGEST 인증인 경우 AUTH_REALM를 사용하고, BASIC 인증은 DEFAULT_LOGON_DOMAIN를 사용합니다.
RESTRICT_IP
and EXCEPT_IP
HTTP 엔드포인트에 접속할 수 있는 IP 목록이나 접속제한할 IP 목록을 지정합니다.
기본값은 IP 주소를 제한하지 않는 것입니다.
COMPRESSION HTTP 요청에 GZIP 인코딩 옵션이 포함된 경우, 클라이언트에 응답할 때 압축기능을 사용하도록 지정합니다. 기본값은 DISABLED 입니다.

2. 접근가능한 웹 메서드 목록을 포함한 엔드포인트 정보 지정
CREATE ENDPOINT 명령의 두번째 부분은 엔드포인트 페이로드 정보를 지정하는 부분입니다. 설정하는 정보는 설정된 엔드포인트가 SOAP 기반 웹서비스이냐 Service Broker 기반 네트워크 통신이냐에 따라 다양하게 설정됩니다.

다음은 SOAP 기반 웹서비스 페이로드 정보를 설정하기 위한 매개변수 목록입니다.
매개변수 설명
WEBMETHOD SOAP 메시지를 사용하여 클라이언트에서 접속할 수 있는 서버측 메서드 목록을 정의합니다. WITH 절에 NAMESPACE 인수를 사용하거나, 웹 메서드를 정의의 일부로 네임스페이스 값을 지정할 수 있습니다. MethodAlias 값은 클라이언트에서 웹서비스의 웹메서드에 요청할 때 사용할 수 있습니다.
NAME 웹 메서드의 기능을 구현할 저장 프로시저나 사용자정의 함수의를 지정합니다. NAME 매개변수는 반드시 schema.name 형식으로 지정해야 합니다.
SCHEMA SOAP 응답내에 웹메서드의 반환값에 대한 인라인 XSD 스키마를 반환할 것인지 여부를 지정합니다. 특정 값을 지정하지 않거나, DEFAULT로 지정한 경우에는, WITH 절에 SCHEMA 인수에 설정된 값으로 지정됩니다.
FORMAT 클라이언트에 대한 응답에 포함할 정보를 지정하기 위해 사용합니다. ALL_RESULTS(기본값)은 결과집합, 행 수, 오류 메시지, 경고 등을 반환합니다. ROWSETS_ONLY로 지정하면, 결과 집합만 반환됩니다.
LOGIN_TYPE 엔드포인트에서 SQL Server 인증 모드를 사용하도록 지정할 수 있습니다. 기본값은 WINDOWS 입니다.
BATCHES 웹서비스에서 sqlbatch 메서드를 사용하여 임의T-SQL 쿼리를 실행하도록 지원할 것인지 여부를 지정합니다. 기본값은 Disabled 입니다.
WSDL 엔드포인트에서 WSDL 문서를 자동으로 생성할 것인지를 지정합니다. 기본값은 Disabled입니다.
SESSIONS ENABLED로 설정된 경우 SQL Server는 세션 지원을 허용하여 여러 SOAP 요청/응답 메시지 쌍을 단일 SOAP 세션의 일부로 식별할 수 있습니다. 기본값은 DISABLED입니다.
SESSION_TIMEOUT 더 이상의 요청이 없을 경우 세션이 서버에서 만료되기까지의 대기기간 시간(초)를 지정합니다.
DATABASE 요청한 작업 실행을 위한 대상 데이터베이스를 지정합니다.
데이터베이스 명이 지정되지 않았거나 DEFAULT가 지정된 경우 로그인의 기본 데이터베이스가 사용됩니다.
NAMESPACE 엔드포인트에 대한 네임스페이스를 지정합니다. 네임스페이스가 지정되지 않았거나 DEFAULT로 지정된 경우 http://tempuri.org 네임스페이스가 사용됩니다.
SCHEMA SOAP 결과를 전송할 때 엔드포인트에서 XSD 스키마를 반환할지 여부를 지정합니다. STANDARD가 기본값이며, 스키마가 기본 값으로 반환된다는 의미입니다.
CHARACTER_SET 작업의 결과가 유효하지 않은 XML 형식의 문자를 포함할 때 동작을 정의합니다.

다음 표는 Service Broker 네트워크 통신 페이로드를 지정하기 위한 매개변수 목록입니다.
매개변수 설명
AUTHENTICATION Service Broker 전송 인증모드를 통제.
MESSAGE_
FORWARDING
메시지 포워딩을 활성화하기 위해서 사용
MESSAGE_
FORWARD_SIZE
포워딩하는 메시지의 최대 저장소 크기(MB 단위)를 지정

전송 프로토콜 정보 지정

전송 프로토콜 정보를 지정하기 위해서는 다음과 같은 구문을 사용합니다.
CREATE ENDPOINT endPointName [AUTHORIZATION login]
STATE = { STARTED | STOPPED | DISABLED }
AS { TCP | HTTP } (
 PATH =‘ url’
, PORTS = ({CLEAR | SSL} [,... n])
[ SITE = ‘{ *’‘| +’‘| webSite’},]
 [, CLEAR_PORT = clearPort ]
 [, SSL_PORT = SSLPort ]
             , AUTHENTICATION =({BASIC | DIGEST | INTEGRATED} [,...n])
 [, AUTH_REALM = {‘ realm’| NONE } ]
 [, DEFAULT_LOGON_DOMAIN = ‘{ domain’| NONE } ]
[, RESTRICT_IP = { NONE | ALL } ]
 [, COMPRESSION = { ENABLED | DISABLED } ]
 [,EXCEPT_IP = ({ <4-part-ip> | <4-part-ip>: } [,...n])
)
엔드포인트 페이로드 정보
앞의 전송프로토콜정보 지정 구문 다음에, 다음과 같은 구문을 사용하여, SOAP 기반 웹 서비스 유형의 엔드포인트 페이로드 정보를 지정할 수 있습니다.
[ FOR { SOAP (
   [ { WEBMETHOD [‘ namespace’.]‘ methodalias’(
          NAME = three.part.name
          [, SCHEMA = { NONE | STANDARD | DEFAULT }]
          [, FORMAT = { ALL_RESULTS | ROWSETS_ONLY }]
          [, LOGIN_TYPE = { MIXED | WINDOWS } ] )
     } [,...n] ]
     [, BATCHES = { ENABLED | DISABLED } ]
     [, WSDL = { NONE | DEFAULT | sp_name } ]

     [ , SESSIONS = { ENABLED | DISABLED } ]
     [ , SESSION_TIMEOUT = int ]
     [, DATABASE = {‘ database_name’| DEFAULT } ]
     [, NAMESPACE = {‘ namespace’| DEFAULT } ]
	 [, SCHEMA = { NONE | STANDARD } ]
     [, CHARACTER_SET = { SQL | XML }]

다음은 Service Broker 엔드포인트를 위한 정보를 지정하기 위한 구문입니다.
FOR SERVICE_BROKER (
  [ AUTHENTICATION = ENABLED | REQUIRED* | NONE ]
  [, MESSAGE_FORWARDING = ENABLED | DISABLED*]
  [, MESSAGE_FORWARD_SIZE = forwardsize
)
다음은 통합인증 모드를 사용하여 두 개의 웹 메서드를 포함하고 있는 엔드포인트를 생성하는 방법을 나타냅니다.

[따라하기] 엔드포인트 생성
CREATE ENDPOINT sql_AdventureWorks
STATE = STARTED
AS HTTP(
   PATH =‘ /sql/AdventureWorks’, AUTHENTICATION = (INTEGRATED),
   PORTS = (CLEAR) )
FOR SOAP (
  WEBMETHOD‘ GetProducts’
 (name=’AdventureWorks.Production.GetProducts’,
  schema=STANDARD),
WEBMETHOD‘ GetProductsNoSchema’
  (name=‘ AdventureWorks.Production.GetProducts’,
   schema=NONE),
   WSDL = DEFAULT,
   BATCHES = ENABLED,
   DATABASE =‘ AdventureWorks’,
   NAMESPACE =‘ http://AdventureWorks/’)

[참고]
BATCHES 인수가 활성화되어 있기 때문에, 웹 서비스에는 세번째 메서드가 포함되어 있다고 할 수 있고, WSDL에는 sqlbatch 메서드가 포함됩니다. WSDL 문서를 조회하기 위해서는 브라우저에서 http://machinename/sql/AdventureWorks?WSDL을 검색합니다.


HTTP 엔드포인트 보안설정
웹 서비스는 항상 적절한 권한이 부여된 사용자만 사용하도록 보안이 유지되어야 합니다.
HTTP 엔드포인트에 보안을 설정하기 위해서는, 다음과 같은 작업을 수행합니다.

1. 데이터베이스에 접근할 수 있는 사용자 계정이나 역할 생성
다음 예제는 SQL Server 에 Windows 사용자 로그인 계정을 추가하고, 기본 데이터베이스를 지정하고, 기본 데이터베이스에 새로 추가한 로그인 사용자에 대한 데이터베이스 사용자를 추가하는 방법을 나타냅니다.

[따라하기] 로그인 및 사용자 생성

USE master
CREATE LOGIN [Adventure-Works\Peter] FROM WINDOWS
WITH DEFAULT_DATABASE = AdventureWorks
GO

USE AdventureWorks
CREATE USER Peter FOR LOGIN [Adventure-Works\Peter]


2. 웹 서비스로 사용할 저장 프로시저나 사용자 정의 함수에 접근할 수 있도록 적절한 사용
권한을 부여합니다. 다음 예제는 GetContact 저장 프로시저를 실행할 수 있는 사용권한을 부여하는 방법을 나타냅니다.

[따라하기] 사용권한 부여

USE AdventureWorks
GRANT EXECUTE ON Production.GetContact TO [Peter]


3. HTTP 엔드포인트에 연결할 수 있는 권한을 사용자와 역할에 부여합니다.
HTTP 엔드포인트에 연결할 수 있는 사용권한을 사용자에게 부여해야 합니다. Master 데이터베이스에서 GRANT CONNECT ON ENDPOINT 명령을 사용하여, 사용자에게 웹 서비스에 연결할 수 있는 권한을 부여할 수 있습니다.

다음 예제는 HTTP 엔드포인트에 연결하기 위한 사용자 사용권한을 설정하는 방법을 나타냅니다.

[따라하기] 엔드 포인트 연결 권한 부여

USE master
GRANT CONNECT ON ENDPOINT:: sql_AdventureWorks TO [Adventure-
Works\Peter]


URL 네임스페이스 예약
SOAP 메시지를 수신하기 위해서는 Windows HTTP API(HTTP.sys)에 네임스페이스를 예약 해야 합니다. 네임스페이스는 암시적으로 예약하는 방법과 명시적으로 예약하는 방법이 있습니다.

암시적인 예약
HTTP 엔드포인트가 생성될 때, SQL Server 가 운영중이라면, SQL Server 에서는 자동적으로 네임스페이스를 예약합니다. SQL Server 가 운영중이 아닌 상태에서는, 다른 어플리케이션에서 해당 네임스페이스를 가져갈 수 있습니다. HTTP.sys내에 네임스페이스를 예약하려고 시도하는 경우, 로컬 Windows 관리자 권한을 가지고 있어야 합니다. 암시적 네임스페이스 예약을 사용하는 경우, CREATE ENDPOINT 권한을 가진 사용자는 반드시 로컬 Windows 관리자 권한을 가지고 있어야 합니다.

다음의 T-SQL 문장의 일부는 HTTP 엔드포인트를 생성하고, 임시 네임스페이스를 예약하는 역할을 합니다. SQL Server 가 운영중인 상태라면, http://MyServer:80/sql/AdventureWorks 엔드포인트에 대한 모든 HTTP 요청을, HTTP API가 SQL Server로 전달하게 됩니다.

[따라하기] 암시적 네임스페이스 예약
CREATE ENDPOINT sql_endpoint
   AS HTTP( SITE =‘ MyServer’,
        PATH =‘ /sql/AdventureWorks’
         ...)
...

명시적인 예약
sp_reserve_http_namespace 저장 프로시저를 사용하여, HTTP.sys 안에 명시적으로 네임스페이스를 예약할 수 있습니다. 명시적으로 네임스페이스를 예약하면, 다른 어플리케이션에서 해당 네임스페이스를 다시 사용할 수 없습니다. 암시적 네임스페이스 예약인 경우, Windows 관리자 권한을 가지고 있어야 합니다. 하지만, 명시적으로 네임스페이스 예약을 설정하는 경우에는, CREATE ENDPOINT 명령을 실행하는 사용자에게 로컬 Windows 관리자 권한을 부여할 필요가 없습니다.

다음 예제는 명시적인 방법으로 네임스페이스를 예약하는 방법을 나타냅니다. HTTP API는 http://MyServer:80/sql 엔드포인트에 대한 HTTP 요청을 SQL Server 로 전달합니다.

[따라하기] 명시적 네임스페이스 예약

sp_reserve_http_namespace N’http://MyServer:80/sql’


.NET 기반 HTTP 엔드포인트 클라이언트 개발
가장 강력하면서도 간단하게 구현할 수 있는 SQL Server HTTP 엔드포인트 활용 방법은 웹서비스를 호출하는 .NET 클라이언트 어플리케이션을 사용하는 것입니다. .NET 클라이언트 어플리케이션을 개발하기 위해서는, 몇 가지 단계의 작업을 수행해야 하며, 일부 작은 양의 코드를 작성해야 합니다.

HTTP 엔드포인트 .NET 어플리케이션을 개발하기 위해서는 다음의 단계를 수행합니다.

[따라하기] HTTP 엔드포인트 개발

1. Visual Studio .NET 프로젝트를 생성합니다.

2. 웹 참조 추가를 사용하여 proxy 클래스를 생성합니다.
프로젝트를 생성한 다음, 프로젝트 메뉴의 웹 참조 추가 옵션을 사용하여, proxy 클래스를 생성할 수 있습니다. 웹 참조 추가 대화상자에서 proxy 클래스를 생성하기 위해서는 WSDL 문서에 대한 URL을 지정해야 합니다.

웹 참조 추가 대화상자에서 웹 참조 명칭을 지정할 수 있습니다. 지정한 웹 참조 명칭은 클라이언트 코드내에서 proxy 클래스에 대한 로컬 네임스페이스의 역할을 수행합니다. 웹 서비스가 동일한 컴퓨터에 설치되어 있는 경우라면, 기본값은 localhost로 지정됩니다.

3. proxy 인스턴스를 생성합니다.
Proxy 클래스의 메서드를 호출하기 위해서는, 먼저 코드에서 proxy 클래스에 대한 인스턴스를 생성해야 합니다. 변수를 선언하고, NEW 키워드를 사용하여, 메모리내에 proxy 클래스의 인스턴스를 생성할 수 있습니다.

4. 보안인증 신임장을 설정합니다.
SQL Server HTTP 엔드포인트와 통신하기 위해서는, 클라이언트 어플리케이션의 유형과 상관없이, 적절한 보안 신임장을 설정해야 합니다.

5. proxy 인스턴스를 통해 웹 메서드를 호출합니다.
인증이 되면, Proxy 인스턴스를 통해 적절한 웹 메서드를 호출할 수 있습니다. 웹 메서드에 대한 호출이 완료되면, 메서드에서 반환한 결과값을 추가 작업을 위해서 저장해 두어야 합니다.

6. 웹 서비스 응답 처리
HTTP 엔드포인트의 FORMAT 인수에 ALL_RESULTS 값을 지정한 경우, 웹 서비스의 응답갑에는 결과집합, 행 수, 오류 메시지, 경고 등이 개체배열형태로 반환됩니다.


proxy 클래스 생성
프로젝트를 생성한 다음, 프로젝트 메뉴의 웹 참조 추가 옵션을 사용하여, proxy 클래스를 생성할 수 있습니다. 웹 참조 추가 대화상자에서 proxy 클래스를 생성하기 위해서는 WSDL 문서에 대한 URL을 지정해야 합니다.

다음 예제는 WSDL URL을 나타냅니다.

http://localhost/sql/AdventureWorks?WSDL


proxy 인스턴스 생성
다음 예제와 같이, 변수를 선언하고, NEW 키워드를 사용하여, 메모리에 proxy 클래스에 대한 인스턴스를 생성할 수 있습니다.

[따라하기] Proxy 생성
‘Visual Basic
    Dim proxy As New AdventureWorks.sql_AdventureWorks
   //Visual C#
   AdventureWorks.sql_AdventureWorks proxy =
	  new AdventureWorks.sql_AdventureWorks( );

앞의 예제는 Visual Basic .NET과, Visual C# .NET을 사용하여 proxy 인스턴스를 생성하는 방법을 나타냅니다. Proxy 클래스는 HTTP 엔드포인트의 명칭은 sql_AdventureWorks으로 호출됩니다. Proxy 클래스에 대한 네임스페이스는 localhost에서 AdventureWorks로 변경됩니다.

proxy 인스턴스 생성
다음 예제는 Windows 어플리케이션에 로그온한 사용자의 보안 신임장을 사용하는 방법을 나타냅니다.

[따라하기] 보안인증신임장 설정
‘Visual Basic
proxy.Credentials = _
         System.Net.CredentialCache.DefaultCredentials
//Visual C#
proxy.Credentials =
         System.Net.CredentialCache.DefaultCredentials;

다음 예제와 같이, 로그온명, 비밀번호, 도메인을 지정하여, 특정 Windows 사용자 계정에 대한 보안신임장을 변경할 수 있습니다.

[따라하기] 보안신임장 변경
‘Visual Basic
proxy.Credentials = _
         New System.Net.NetworkCredentia“l( Peter”, _
         ”P@ssw0rd”,“ Adventure-Works”)
//Visual C#
proxy.Credentials =
         new System.Net.NetworkCredentia“l( Peter”,
        ”P@ssw0rd”,“ Adventure-Works”);

[참고]
위와 동일한 방법을 통해, SQL Server 로그온을 사용할 수 있습니다. 도메인명은 지정하지 않습니다.


웹 메서드 호출
다음 예제는 GetProducts 웹 메서드를 호출하는 방법을 나타냅니다.

[따라하기] GetProducts 메서드 호출

‘Visual Basic
Dim results( ) As Object = proxy.GetProducts
//Visual C#
object[] results = proxy.GetProducts;

응답 처리
다음 예제는 결과값을 처리하기 위한 간단한 접근방법을 나타냅니다.

[따라하기] 응답처리
‘Visual Basic
  If results(0).ToString( ) =“ System.Data.DataSet”Then
      Dim ds As DataSet = results(0)
      ’processing of DataSet
   End If
   If results(1) =“ Client.AdventureWorks.SqlRowCount”Then
      Dim rowcount As AdventureWorks.SqlRowCount = results(1)
	  ’processing of rowcount
End If
//Visual C#
if (results[0].ToString( ) ==“ System.Data.DataSet”)
{
     DataSet ds = (DataSet) results[0];
     //processing of DataSet
}
if (results[1].ToString( ) ==“ TestHarnessCS.AdventureWorks.SqlRowCount”)
{
    AdventureWorks.SqlRowCount rowcount =
           (AdventureWorks.SqlRowCount) results[1];
   //processing of rowcount
}

HTTP 엔드포인트에 FORMAT 인수를 ROWSETS_ONLY로 지정하면, 웹서비스에 대한 응답에 결과값에 해당하는 System.Data. DataSet 개체만 포함됩니다.

다음 예제는 ROWSET_ONLY로 지정한 웹 메서드에 대한 응답을 처리하는 방법을 나타냅니다.

[따라하기] ROWSET_ONLY 웹 메서드 응답처리
‘Visual Basic
Dim ds As DataSet = proxy.GetProductsDS
//Visual C#
DataSet ds = proxy.GetProductsDS;

[출처] DBGuide.net