若要讓 SOAP 用戶端建立其自己的 SOAP 要求而非使用由 Visual Studio 2005 提供的 Proxy 類別,您必須使用下列訊息格式。
預存程序與使用者自訂類型的 SOAP 要求訊息格式
以下範例示範傳送給 SQL Server 2005 執行個體的典型 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 Web Service 要求的範例應用程式>。下列方法參數當作 <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" 屬性。但是為參數類型傳遞 NULL 值時,例如 integer 和 float (數值類型),Visual Studio 2005 就不會產生 xsi:nil="true" 屬性,而是提供這些參數的預設值,例如,integer 類型為 0,float 類型為 0.0 等。因此,若要傳遞 NULL 值至這些參數類型,必須使用 xsi:nil="true" 屬性在應用程式中建立 SOAP 訊息。如需詳細資訊,請參閱<原生 XML Web Service 中的指導方針和限制>
您可以為參數提供數個 Facet。本主題內接下來的表格中,會列出要求特定 SQL 查詢時可以指定的數個 Facet。在此表中,可以為 <Value> 節點指定的所有 Facet,皆可在 RPC 方法參數節點上指定。
要求特定 SQL 查詢時的 SOAP 要求訊息格式
當您傳送 SOAP 要求欲執行特定 SQL 查詢時,必須呼叫 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) 範例中,僅傳遞一個參數給查詢。每個參數作為<Parameters>元素的<SqlParameter>子元素加入到 SOAP 訊息中。傳遞參數時,您至少必須傳遞參數名稱 (<SqlParameter>元素的Name屬性) 和參數值 (<SqlParameter>元素的<Value>子元素 )。
若要避免轉換錯誤,請盡可能提供詳細的參數資訊。下表列出了可為 <SqlParameter> 元素指定的其他參數 Facet。您也可以為 <Value> 元素指定表中所示的某些 Facet。
對於可以在 <SqlParameter> 與 <Value> 兩種元素上指定的 Facet,當指定 <Value> 元素時,Facet 必須位於 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>
| 參數 Facet | 註解 | 可以在節點上指定 |
|---|---|---|
direction |
指定參數方向 (Input、InputOutput)。預設為 Input。 |
<SqlParameter> |
localeID |
定義字元類型定序的視窗地區設定。相當於 COLLATIONPROPERTY 內建傳回的 LCID 值。 |
<SqlParameter> <值> |
maxLength |
<SqlParameter> 元素的屬性提供參數值的最大長度。預設值為 1。 |
<SqlParameter> <Value> |
name |
<SqlParameter> 元素的屬性提供參數名稱。 |
<SqlParameter> |
outputRequested |
可套用至參數元素,指示是否應該發出輸出。預設行為取決於使用的 parameterMode,與外顯或預設模式無關。 若輸入參數上屬性設定為 "true",將會產生錯誤。 |
<Value> |
precision |
<SqlParameter> 元素的屬性提供參數值的有效位數。預設值為 18。 |
<SqlParameter> <Value> |
scale |
<SqlParameter> 元素的屬性提供參數值的小數位數。預設值為 0。 |
<SqlParameter> <值> |
sqlCompareOptions |
定義字元類型定序使用的比較選項。 其為可以組合的列舉值,與 COLLATIONPROPERTY 內建傳回之 ComparisonStyle 值相符。 |
<SqlParameter><值> |
sqlDbType |
指定參數類型。如需可以指定的 SQL Server 2005 系統資料類型清單,請參閱<原生 XML Web Service 中的資料類型對應>。 |
<SqlParameter> |
typeName |
用來指定使用者自訂類型引數。typeName 的名稱必須包含三部份。 |
<SqlParameter> <值> |
useDefaultValue |
表示參數應該使用預設值,此參數元素可以從清單省略,或者可以指定值為 "true" 的布林屬性 useDefaultValue。若包含元素,屬性的預設值為 "false",若省略元素,則預設值為 "true"。 |
<SqlParameter> <值> |
XmlNamespace |
指定與 xml 類型參數相關聯的 XML 結構描述命名空間。 |
<SqlParameter> <值> |
xsi:type |
指定值類型。如需有關 xsi:type facet 如何對應到 SQL Server 2005 系統資料類型的詳細資訊,請參閱<資料類型 (Transact-SQL)>。 |
<值> |
請參閱
參考
SOAP 要求與回應訊息結構
SOAP 延伸模組標頭
SOAP 回應訊息結構
SOAP 錯誤訊息結構
用於 SOAP 要求和回應的命名空間