SOAP 응답 메시지 구조
Microsoft SQL Server의 이후 버전에서는 이 기능이 제거됩니다. 새 개발 작업에서는 이 기능을 사용하지 않도록 하고, 현재 이 기능을 사용하는 응용 프로그램은 수정하십시오.
이 항목은 SOAP 응답 메시지의 구조에 대해 설명하며, 이 정보는 사용자가 Visual Studio 2005에서 제공하는 프록시 클래스를 사용하는 대신 SOAP 응답의 구문을 분석하려는 경우 유용합니다.
SQL Server 2005 인스턴스가 반환하는 SOAP 응답 메시지에는 다음 요소가 하나 이상 포함됩니다.
SELECT 쿼리에 대한 결과 집합
저장 프로시저 및 사용자 정의 함수에 대한 반환 코드
행 수(쿼리의 영향을 받은 행 수)
출력 매개 변수 값
오류 메시지 또는 경고
다음은 저장 프로시저가 실행된 후 SQL Server에서 반환하는 SOAP 응답 구조의 일부입니다.
<?xml version="1.0" encoding="utf-8" ?>
<SOAP-ENV:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema"
...>
<SOAP-ENV:Body>
<method:MethodNameResponse>
<method:MethodNameResult
xsi:type="sqlresultstream:SqlResultStream">
<!--
the results are returned here
-->
</method:MethodNameResult>
<method:OutputParam>Value</method:OutputParam>
</method:MethodNameResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
작업 결과는 SOAP 본문의 <MethodNameResponse> 요소에 래핑됩니다. <MethodNameResponse> 요소는 다음 자식 요소를 포함할 수 있습니다.
결과, 행 수 값, 오류 메시지 및 경고를 포함하는 <MethodNameResult>
저장 프로시저가 반환한 출력 매개 변수(있는 경우)를 포함하는 <OutputParameter>
<MethodNameResult> 요소
작업 결과는 <MethodNameResult> 요소에 포함되어 반환됩니다. 여기서 MethodName은 저장 프로시저 또는 사용자 정의 함수의 이름이거나 임시 일괄 처리 쿼리의 경우 sqlbatch입니다. sqlbatch는 임시 쿼리를 실행하는 데 사용된 메서드입니다.
<MethodNameResult> 요소 내에서 결과가 다음과 같이 직렬화됩니다.
SELECT 문의 결과는 <SqlRowSet> 요소에 래핑됩니다. <SqlRowSet> 요소에 직렬화된 결과는 DiffGram 직렬화 형식을 사용합니다. DiffGram 형식은 Microsoft.NET Framework의 DataSet 구성 요소에 도입되었습니다. 이 경우 응답에서 데이터 앞에 XSD 스키마도 포함됩니다(스키마를 사용하여 끝점이 생성된 경우). Visual Studio 2005 클라이언트에서는 결과가 System.Data.DataSet 개체로 반환됩니다.
[!참고]
Visual Studio 2005를 사용할 경우 SOAP 결과를 System.Data.DataSet 개체로 로드하려면 SQL Server에서 클라이언트에 반환하는 SOAP 응답에 인라인 스키마가 포함되어야 합니다. 끝점 생성 시 SCHEMA 키워드를 생략하거나 SCHEMA=STANDARD를 지정하여 끝점에 대해 이 동작을 설정할 수 있습니다. 자세한 내용은 CREATE ENDPOINT(Transact-SQL)을 참조하십시오.
SELECT... FOR XML 문의 결과는 <SqlXml> 요소에 래핑됩니다. 결과 집합이 여러 개 반환되는 경우(예: 여러 개의 SELECT...FOR XML 쿼리가 있는 저장 프로시저) 각 결과 집합은 각각의 <SqlXml> 요소에 래핑됩니다. 또한 각 결과 뒤에 <SqlRowCount> 요소가 나옵니다. 이 요소는 쿼리의 영향을 받은 행 수를 반환합니다. 이는 다음 응답을 보면 알 수 있습니다.
<tns:MethodNameResponse> <tns:MethodNameResult xsi:type="sqlsoaptypes:SqlResultStream"> <sqlresultstream:SqlXml xsi:type="sqlsoaptypes:SqlXml" > <SqlXml> <!-- XML result --> </SqlXml> </sqlresultstream:SqlXml> <sqlresultstream:SqlRowCount xsi:type="sqlrowcount:SqlRowCount"> <sqlrowcount:Count>NoOfRowsAffected</sqlrowcount:Count> </sqlresultstream:SqlRowCount> <sqlresultstream:SqlXml xsi:type="sqlsoaptypes:SqlXml" > <SqlXml> <!-- XML Document that maps to XMLElement object in the client--> </SqlXml> </sqlresultstream:SqlXml> <sqlresultstream:SqlRowCount xsi:type="sqlrowcount:SqlRowCount"> <sqlrowcount:Count>NoOfRowsAffected</sqlrowcount:Count> </sqlresultstream:SqlRowCount> <!-- more results ...--> </tns:MethodNameResult> <tns:OutputParam>Value</tns:OutputParam> </tns:MethodNameResponse>
SELECT... FOR XML 쿼리에 XMLSCHEMA를 지정하여 XSD 스키마를 요청하는 경우에는 <SqlXml> 요소의 첫 번째 자식 요소로 XSD 스키마가 반환됩니다.
Visual Studio 2005 클라이언트에서는 결과가 System.Xml.XmlElement 개체로 반환됩니다.
저장 프로시저 및 사용자 정의 함수의 반환 코드 값은 <SqlResultCode> 요소에 래핑됩니다. 이는 다음 응답을 보면 알 수 있습니다.
<tns:MethodNameResponse>
<tns:MethodNameResult xsi:type="sqlsoaptypes:SqlResultStream"> <!-- results --> <sqlresultstream:SqlResultCode xsi:type="sqlsoaptypes:SqlResultCode"> ReturnCodeValue </sqlresultstream:SqlResultCode> </tns:MethodNameResult> <tns:OutputParam>Value</tns:OutputParam> </tns:MethodNameResponse>
Visual Studio 2005 클라이언트에서 반환 코드는 개체로 반환됩니다.
SQL Server 오류 메시지, 경고 및 기타 정보 메시지는 <SqlMessage> 요소에 래핑됩니다. 이는 다음 SOAP 응답을 보면 알 수 있습니다.
<tns:MethodNameResponse> <tns:MethodNameResult xsi:type="sqlresultstream:SqlResultStream"> <sqlresultstream:SqlMessage> <!-- Error message returned as SqlMessage object in the client --> </sqlresultstream:SqlMessage> ... </tns:MethodNameResult> <!-- followed by one or more return parameters -> ... </tns:MethodNameResponse>
다음 SOAP 응답은 GetCustomerInfo 저장 프로시저 실행 후 반환된 것입니다. 이 저장 프로시저에 대한 자세한 내용은 네이티브 XML 웹 서비스 요청 보내기 예제 응용 프로그램을 참조하십시오. 저장 프로시저의 첫 번째 INSERT 문은 실패하며 이로 인해 다음과 같은 응답이 반환됩니다.
<method:GetCustomerInfoResponse> <method:GetCustomerInfoResult xsi:type="sqlresultstream:SqlResultStream"> <sqlresultstream:SqlMessage> <sqlresultstream:SqlMessage xsi:type="sqlmessage:SqlMessage"> <sqlmessage:Class>16</sqlmessage:Class> <sqlmessage:LineNumber>12</sqlmessage:LineNumber> <sqlmessage:Message>Cannot insert the value NULL into column 'CompanyName', table 'Northwind.dbo.Customers'; column does not allow nulls. INSERT fails. </sqlmessage:Message> <sqlmessage:Number>515</sqlmessage:Number> <sqlmessage:Procedure>GetCustomerInfo</sqlmessage:Procedure> <sqlmessage:Server>SQLServerName</sqlmessage:Server> <sqlmessage:Source>MicrosofTransact- SQL/9.0</sqlmessage:Source> <sqlmessage:State>2</sqlmessage:State> </sqlresultstream:SqlMessage> <sqlresultstream:SqlRowCount xsi:type="sqlrowcount:SqlRowCount"> <sqlrowcount:Count>0</sqlrowcount:Count> </sqlresultstream:SqlRowCount> <sqlresultstream:SqlResultCode xsi:type="sqlsoaptypes:SqlResultCode">-6 </sqlresultstream:SqlResultCode> </method:GetCustomerInfoResult> <!-- followed by one or more output parameters -> </method:GetCustomerInfoResponse> </tns:MethodNameResponse>
Visual Studio 2005 클라이언트에서는 이러한 결과가 SqlMessage 형식 개체로 반환됩니다.
<OutputParameter> 요소
각 출력 매개 변수 값은 요소에 래핑되어 반환됩니다. 요소 이름은 출력 매개 변수의 이름입니다. 이 요소는 <MethodNameResponse> 요소의 마지막 자식 요소로 <MethodNameResult> 요소 뒤에 나옵니다. 이는 다음 SOAP 응답을 보면 알 수 있습니다. 두 개의 출력 매개 변수가 반환됩니다.
<tns:MethodNameResponse>
<tns:MethodNameResult xsi:type="sqlresultstream:SqlResultStream">
<!-- results, error messages and warnings -->
</tns:MethodNameResult>
<tns:OutputParam1>Value</tns:OutputParam1>
<tns:OutputParam2>Value</tns:OutputParam2>
</tns:MethodNameResponse>