SOAP 응답 메시지 구조
이 항목은 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 2005 에서 클라이언트에 반환하는 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 2005 오류 메시지, 경고 및 기타 정보 메시지는 <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>
참고 항목
참조
Visual Studio 2005 클라이언트(C#)를 사용하여 SOAP 요청 보내기
Visual Studio 2005 클라이언트를 사용하여 SOAP 요청 보내기(Visual Basic)
서버를 설정하여 네이티브 XML 웹 서비스 요청 수신
SOAP 요청 및 응답 메시지 구조
네이티브 XML 웹 서비스의 지침 및 제한 사항