다음을 통해 공유


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>

&lt;MethodNameResult&gt; 요소

작업 결과는 <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 형식 개체로 반환됩니다.

&lt;OutputParameter&gt; 요소

각 출력 매개 변수 값은 요소에 래핑되어 반환됩니다. 요소 이름은 출력 매개 변수의 이름입니다. 이 요소는 <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>