SOAP 요청 메시지 구조
Microsoft SQL Server의 이후 버전에서는 이 기능이 제거됩니다. 새 개발 작업에서는 이 기능을 사용하지 않도록 하고, 현재 이 기능을 사용하는 응용 프로그램은 수정하십시오.
SOAP 클라이언트가 Visual Studio 2005에서 제공하는 프록시 클래스를 사용하는 대신 자체 SOAP 요청을 작성하도록 하려면 다음 메시지 형식을 사용해야 합니다.
저장 프로시저 및 사용자 정의 형식의 SOAP 요청 메시지 형식
다음 예제에서는 SQL Server 인스턴스로 보내는 일반적인 SOAP 요청을 보여 줍니다. SOAP 메시지에서 GetCustomerInfo 작업을 요청합니다. 다음 예에서는 HTTP 헤더의 일부분만 보여 줍니다.
POST /url HTTP/1.1
Host: HostServerName
Content-type: text/xml; charset=utf-8
Content-length: 350
SoapAction: http://tempUri.org/GetCustomerInfo
...
<?xml version="1.0" encoding="utf-8" ?>
<soap:Envelope
xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<GetCustomerInfo xmlns="http://tempUri.org/">
<CustomerID>1</CustomerID>
<OutputParam />
</GetCustomerInfo>
</soap:Body>
</soap:Envelope>
HTTP 헤더
이전 코드에서 SoapAction HTTP 헤더 필드의 값은 네임스페이스 다음에 나오는 메서드 이름입니다. 이 값은 CREATE ENDPOINT를 사용하여 만든 끝점에 추가한 네임스페이스 및 메서드와 동일합니다. 이 필드는 선택 사항입니다. Host HTTP 헤더 필드는 HTTP 요청을 보낼 서버를 식별합니다.
<soap:Envelope> 요소
SOAP 요청의 세부 사항은 SOAP Envelope의 <Body> 요소에 포함됩니다. 위의 예에서는 GetCustomerInfo 메서드를 요청합니다. <GetCustomerInfo>의 xmlns 특성은 CREATE ENDPOINT를 사용하여 끝점을 만든 이 메서드에 지정된 네임스페이스와 동일합니다. 저장 프로시저 및 네임스페이스에 대한 자세한 내용은 네이티브 XML 웹 서비스 요청 보내기 예제 응용 프로그램을 참조하십시오. 다음 메서드 매개 변수는 <GetCustomerInfo> 요소의 자식 요소로 전달됩니다.
값이 1인 <CustomerID> 요소는 입력 매개 변수입니다.
<OutputParam> 요소는 출력 매개 변수입니다.
입력 매개 변수 처리
입력 매개 변수는 다음 방법으로 처리됩니다.
SOAP 메서드에서 입력 매개 변수를 요구하지만 이 매개 변수가 SOAP 요청에 없으면 호출된 저장 프로시저로 값이 전달되지 않습니다. 저장 프로시저에 정의된 기본 동작이 수행됩니다.
SOAP 메서드에서 입력 매개 변수를 요구하고 이 매개 변수가 요청에 있지만 값이 할당되지 않으면 이 매개 변수는 값이 빈 문자열 상태로 저장 프로시저로 전달됩니다. 이 값은 NULL이 아닙니다.
SOAP 작업에서 입력 매개 변수를 요구하는 경우 이 매개 변수에 대해 NULL 값을 보내려면 SOAP 요청에서 xsi:nil 특성을 "true"로 설정해야 합니다. 예를 들면 다음과 같습니다.
<GetCustomerInfo xmlns="http://tempUri.org/" > <CustomerID xsi:nil="true" /> <OutputParam /> </GetCustomerInfo>
Visual Studio 2005에서 NULL 값을 문자열 변수로 보내면 SOAP 요청에 xsi:nil="true" 특성이 생성됩니다. 그러나 integer 및 float와 같은 유형(값 유형)의 매개 변수에 대해 NULL 값을 전달하면 Visual Studio 2005에서는 xsi:nil="true" 특성을 생성하지 않습니다. 대신 이러한 매개 변수에 기본값을 제공합니다. 예를 들어 integer 유형에 대해서는 0, float 유형에 대해서는 0.0 등의 기본값을 제공합니다. 따라서 이러한 유형의 매개 변수로 NULL 값을 전달하려면 xsi:nil="true" 특성을 사용하여 응용 프로그램에서 SOAP 메시지를 작성해야 합니다. 자세한 내용은 네이티브 XML 웹 서비스의 지침 및 제한 사항을 참조하십시오.
매개 변수에 여러 개의 패싯을 제공할 수 있습니다. 이 항목의 뒷 부분에 나오는 테이블에서는 임시 SQL 쿼리를 요청할 때 지정할 수 있는 여러 개의 패싯을 보여 줍니다. 이 테이블에서 <Value> 노드에 대해 지정할 수 있는 모든 패싯을 RPC 메서드 매개 변수 노드에 지정할 수 있습니다.
임시 SQL 쿼리 요청 시 SOAP 요청 메시지 형식
임시 SQL 쿼리 실행을 위해 SOAP 요청을 보내는 경우 sqlbatch 메서드를 호출하여 쿼리를 전달해야 합니다. 이때 매개 변수가 필요할 수 있습니다.
다음 예제에서는 HTTP SOAP 요청에서 sqlbatch 메서드를 호출합니다. 다음 예에서는 HTTP 헤더의 일부분만 보여 줍니다.
POST /url HTTP/1.1
Host: HostServerName
Content-type: text/xml; charset=utf-8
Content-length: 656
SoapAction: https://schemas.microsoft.com/sqlserver/2004/SOAPsqlbatch
...
<?xml version="1.0" encoding="utf-8" ?>
<soap:Envelope xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<sqlbatch xmlns="https://schemas.microsoft.com/sqlserver/2004/SOAP">
<BatchCommands>
SELECT EmployeeID, FirstName, LastName
FROM Employee
WHERE EmployeeID=@x
FOR XML AUTO;
</BatchCommands>
<Parameters>
<SqlParameter Name="x" SqlDbType="Int" MaxLength="20"
xmlns="https://schemas.microsoft.com/SQLServer/
2001/12/SOAP/types/SqlParameter">
<Value xsi:type="xsd:string">1</Value>
</SqlParameter>
</Parameters>
</sqlbatch>
</soap:Body>
</soap:Envelope>
HTTP 헤더
HTTP 헤더에서 SoapAction HTTP 헤더 필드 값은 클라이언트가 SQL 쿼리를 지정하는 데 사용하는 메서드 이름(sqlbatch)입니다. 이 헤더는 선택 사항입니다.
<soap:Envelope> 요소
SOAP 요청의 세부 사항은 <Body> 요소에 표시됩니다. SOAP <Body> 요소에는 자식 요소(<sqlbatch>) 하나만 있고 이 요소는 요청된 메서드를 식별합니다. 이 요소에서 식별된 네임스페이스는 sqlbatch 작업이 정의되는 위치입니다. 이 요소에는 다음과 같은 자식 요소가 있습니다.
<BatchCommands> 요소는 실행할 쿼리 또는 세미콜론(;)으로 구분하여 여러 쿼리를 지정합니다.
<Parameters> 요소는 선택적인 매개 변수 목록을 제공합니다. 위의 예에서 요청 Envelope에서 쿼리로 전달되는 매개 변수는 단 하나입니다. 각 매개 변수는 SOAP 메시지에 <Parameters> 요소의 <SqlParameter> 자식 요소로 추가됩니다. 매개 변수를 전달할 때 적어도 매개 변수 이름(<SqlParameter> 요소의 Name 특성) 및 매개 변수 값(<SqlParameter> 요소의 <Value> 자식 요소)은 전달해야 합니다.
예기치 않은 변환을 방지하려면 가능한 많은 매개 변수 정보를 제공해야 합니다. 다음 표에는 <SqlParameter> 요소에 지정할 수 있는 추가 매개 변수 패싯 목록이 나와 있습니다. 또한 <Value> 요소에 대해서도 이러한 패싯 중 일부를 지정할 수 있습니다.
<SqlParameter> 및 <Value> 요소 모두에 대해 지정할 수 있는 패싯은 <Value> 요소를 지정할 때 다음 예에 표시된 대로 https://schemas.microsoft.com/sqlserver/2004/sqltypes 네임스페이스에 있어야 합니다.
<Value xsi:type="xsd:string" sqltypes:maxLength="100" xmlns:sqltypes="https://schemas.microsoft.com/sqlserver/2004/sqltypes">1</Value>
매개 변수 패싯 |
설명 |
지정 가능한 노드 |
---|---|---|
direction |
매개 변수 방향(Input, InputOutput)을 지정합니다. Input이 기본값입니다. |
<SqlParameter> |
localeID |
문자 유형의 데이터 정렬을 위해 Windows 로캘을 정의합니다. COLLATIONPROPERTY intrinsic에서 반환하는 LCID 값과 같습니다. |
<SqlParameter> <값> |
maxLength |
<SqlParameter> 요소의 특성은 최대 길이의 매개 변수 값을 제공합니다. 기본값은 1입니다. |
<SqlParameter> <값> |
name |
<SqlParameter> 요소의 특성은 매개 변수 이름을 제공합니다. |
<SqlParameter> |
outputRequested |
매개 변수 요소에 적용되어 출력을 내보낼지 여부를 나타냅니다. 기본 동작은 사용되는 parameterMode가 명시적인지 또는 기본값인지 여부에 따라 다릅니다. 입력 매개 변수에서 특성을 "true"로 설정하면 오류가 생성됩니다. |
<값> |
전체 자릿수 |
<SqlParameter> 요소의 특성은 매개 변수 값의 전체 자릿수를 제공합니다. 기본값은 18입니다. |
<SqlParameter> <값> |
소수 자릿수 |
<SqlParameter> 요소의 특성은 매개 변수 값의 소수 자릿수를 제공합니다. 기본값은 0입니다. |
<SqlParameter> <값> |
sqlCompareOptions |
문자 유형의 데이터 정렬에 대해 사용할 비교 옵션을 정의합니다. COLLATIONPROPERTY intrinsic에서 반환하는 ComparisonStyle 값과 일치하며 결합될 수 있는 값의 열거형입니다. |
<SqlParameter><Value> |
sqlDbType |
매개 변수 유형을 지정합니다. 지정할 수 있는 SQL Server 시스템 데이터 형식의 목록을 보려면 네이티브 XML 웹 서비스의 데이터 형식 매핑을 참조하십시오. |
<SqlParameter> |
clrTypeName |
CLR 사용자 정의 유형 인수를 지정하는 데 사용됩니다. clrTypeName에는 세 부분으로 된 이름을 지정할 수 있습니다. |
<SqlParameter> <값> |
useDefaultValue |
매개 변수에 기본값을 사용해야 함을 나타냅니다. 매개 변수 요소는 목록에서 생략하거나, 값이 "true"인 부울 특성 useDefaultValue를 지정할 수도 있습니다. 이 특성의 기본값은 요소가 포함된 경우에는 "false"이고 요소가 생략된 경우에는 "true"입니다. |
<SqlParameter> <값> |
XmlNamespace |
xml 유형 매개 변수와 관련된 XML 스키마 네임스페이스를 지정합니다. |
<SqlParameter> <값> |
xsi:type |
값 유형을 지정합니다. xsi:type 패싯이 SQL Server 시스템 데이터 형식에 매핑되는 방법에 대한 자세한 내용은 네이티브 XML 웹 서비스의 데이터 형식 매핑을 참조하십시오. |
<값> |
typename |
사용자 정의 형식 인수를 지정하는 데 사용됩니다. typename에는 세 부분으로 된 이름을 지정할 수 있습니다. |
<SqlParameter> <값> |