国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > SQL Server > 正文

面向Microsoft SQL Server 2005的本機(jī)XML Web Services概述

2024-08-31 00:50:06
字體:
供稿:網(wǎng)友

  了解如何借助sql server 2005(以前稱為“yukon”)中的soap/http來設(shè)置和使用xml web services。文中還包含了相關(guān)的示例。為了從本文最大地受益,應(yīng)該對web服務(wù)技術(shù)具有基本的了解,包括http、soap和wsdl。它包含的具體內(nèi)容有:要求、http終結(jié)點、創(chuàng)建http終結(jié)點、身份驗證與安全、wsdl、soap rpc:方法調(diào)用、批處理:即席查詢和管理。

  簡介

  microsoft® sql server™ 2005 提供了一個標(biāo)準(zhǔn)機(jī)制,用于使用 soap 通過 http 訪問數(shù)據(jù)庫引擎。通過使用此機(jī)制,可將 soap/http 請求發(fā)送到 sql server 以執(zhí)行以下內(nèi)容:

  ◆transact-sql 批處理語句,帶參數(shù)或不帶參數(shù)。

  ◆存儲過程,擴(kuò)展存儲過程以及用戶定義的標(biāo)量值函數(shù)。

  在 sql server 2005 之前,可用于連接 sql server 的唯一機(jī)制就是通過名為 tabular data stream (tds) 的自定義二進(jìn)制協(xié)議。利用 soap/http 訪問,我們提供了一種開放的且具有相關(guān)文檔的協(xié)議,可以作為后備手段,以連接到 sql server。提供 soap/http 訪問,可以使更多類型的客戶端訪問 sql server,其中包括“無痕跡安裝”客戶端,因為已不再需要在客戶端設(shè)備上安裝 microsoft 數(shù)據(jù)訪問組件 (mdac) 棧以嘗試連接到 sql server。它方便了與各種平臺上的 .net、soap 工具包、perl 以及更多功能的互操作。由于 soap/http 訪問機(jī)制基于各種應(yīng)用廣泛的技術(shù)(如 xml 和 http),它能內(nèi)在地促進(jìn)異構(gòu)環(huán)境中與 sql server 的互操作性及對 sql server 的訪問。任何能夠分析 xml 和提交 http 請求的設(shè)備現(xiàn)在都能夠訪問 sql server。

  很多企業(yè)都采用異構(gòu)的環(huán)境,其中運行于 unix 和 linux 平臺上的應(yīng)用程序可能需要連接到 sql server。在以前,此類用戶唯一可用的解決方案就是使用 jdbc 或 odbc 驅(qū)動程序。soap/http 訪問現(xiàn)在提供另一個低成本的后備方法。對于 dba 使用 perl 編寫了運行于 unix 上的腳本以管理 sql server 資源的場景,這非常有用。在開發(fā)使用智能集成開發(fā)環(huán)境 (ide)(其中內(nèi)置了 soap/http 支持,如 microsoft visual studio® .net 或 jbuilder 就屬于此類 ide)開發(fā)客戶端應(yīng)用程序時,這也十分有用。這些 ide 將生成特定的代理代碼,這些代理代碼對 sql server 通信進(jìn)行抽象,并提供客戶端應(yīng)用程序可以使用的對象。使用 soap/http 還實現(xiàn)了隨時隨地對 sql server 的訪問,而這使得開發(fā)用于移動設(shè)備或偶爾連接的設(shè)備的應(yīng)用程序更為容易。一旦建立了連接,并且服務(wù)器已開始處理請求,則可以使用 tds 所基于的客戶端上的現(xiàn)有機(jī)制(如使用 sqlclient、odbc 和 oledb)對此進(jìn)行監(jiān)視。

|||

  要求

  sql server 2005 本機(jī) web 服務(wù)要求使用 microsoft windows server™ 2003 作為操作系統(tǒng),因為它們依賴于此版本提供的內(nèi)核模式 http 驅(qū)動程序 http.sys。由于 sql server 利用內(nèi)核模式 http.sys 驅(qū)動程序,所以不必安裝 iis 以在 sql server 外公開 web 服務(wù),這就簡化了管理。

  應(yīng)該根據(jù)應(yīng)用程序要求決定是否安裝 iis。

  例如,特定的應(yīng)用程序可能從使用顯式中間層而受益。在這種情況下,iis 將很有用。

  http 終結(jié)點

  為了將 sql server 設(shè)置為可以本機(jī)偵聽 http soap 請求的 web 服務(wù),需要創(chuàng)建 http 終結(jié)點并定義該終結(jié)點公開的方法。當(dāng)創(chuàng)建 http 終結(jié)點時,必須使用唯一的 url 進(jìn)行創(chuàng)建,將使用此 url 偵聽傳入的 http 請求。例如,如果您使用 url“http://servername/sql”創(chuàng)建一個終結(jié)點,發(fā)送到 http://servername/sql 的 soap 請求將由 http.sys. 拾取,然后將此 soap 請求路由到承載與該 url 關(guān)聯(lián)的終結(jié)點的 sql server 實例。請求將從此處傳遞到 sql server 內(nèi)的 soap 處理層。

  sql server 實例可以具有多個終結(jié)點,每個終結(jié)點都可以將任意數(shù)量的存儲過程(通過使用 transact-sql 或 clr 實現(xiàn))公開為終結(jié)點上的 webmethod,且可以通過 soap 遠(yuǎn)程過程調(diào)用 (rpc) 而調(diào)用。webmethod 可以具有與所公開的實際存儲過程不同的名稱。webmethod 名稱就是在 wsdl 中作為操作名稱向用戶顯示的名稱。

  注意  務(wù)必指出,終結(jié)點中的 webmethod 子句是特定于 sql server 2005 的,與 asmx webmethod 屬性無關(guān)。

  用戶可以對終結(jié)點執(zhí)行 adhoc transact-sql 語句。這可以通過使用數(shù)據(jù)定義語言 (ddl) 中的一個可選子句在終結(jié)點上允許進(jìn)行批處理而實現(xiàn)。允許進(jìn)行批處理將隱式地將名為“sqlbatch”的 webmethod 公開給用戶。在接下來的各節(jié)中將進(jìn)一步對這些概念進(jìn)行說明。

|||

  創(chuàng)建 http 終結(jié)點

  http 終結(jié)點是使用 transact-sql ddl 創(chuàng)建和管理的。創(chuàng)建 http 終結(jié)點是允許 http/soap 訪問 sql server 2005 的第一步。每個終結(jié)點都具有名稱和一個選項集合,這些選項一起定義終結(jié)點的行為。

  為了演示如何使用“創(chuàng)建 http 終結(jié)點”的內(nèi)容,讓我們看看 hello world 示例,以了解如何通過 sql server web 服務(wù)調(diào)用存儲過程。

  首先,使用以下 t-sql 在主數(shù)據(jù)庫中創(chuàng)建名為“hello world”的存儲過程。此存儲過程只是顯示輸入?yún)?shù)中提供的字符串。

create procedure hello_world
(@msg nvarchar(256))
as begin
select @msg as 'message'
end

  然后,使用以下 t-sql 創(chuàng)建 http 終結(jié)點,此終結(jié)點將允許將此存儲過程作為一個 webmethod 進(jìn)行訪問:

create endpoint hello_world_endpoint
state = started
as http (
authentication = ( integrated ),
path = '/sql/demo',
ports = ( clear )
)
for soap (
webmethod
'http://tempuri.org/'.'hello_world'
(name = 'master.dbo.hello_world'),
batches = enabled,
wsdl = default
)

  所有終結(jié)點均存儲在主數(shù)據(jù)庫中,在元數(shù)據(jù)視圖 master.sys.http_endpoints 中。除非進(jìn)行定義,否則終結(jié)點不會具有任何 soap 方法。在上例中,我們將存儲過程 master.dbo.hello_world 作為“hello_world”webmethod 公開;該 webmethod 可以使用任何名稱,如可以命名為“http://tempuri.org”命名空間下的“testproc1”。如果將 wsdl 子句的值指定為 default,將使終結(jié)點使用默認(rèn)格式對請求 wsdl 生成的 wsdl 進(jìn)行響應(yīng)。通過在上面的語句中設(shè)置 wsdl=none,可以取消 wsdl 生成。在接下來的部分中,我們將對 wsdl 生成的細(xì)節(jié)進(jìn)行討論。



|||

  身份驗證與安全

  http 終結(jié)點支持以下標(biāo)準(zhǔn)身份驗證機(jī)制:基本、摘要、集成(ntlm、kerberos)以及 sql 身份驗證。首先會在 http 傳輸層進(jìn)行身份驗證。一旦這個驗證成功,將使用用戶的 sid 進(jìn)行 sql 身份驗證。除了以下情況,這適合于所有選項:通過指定 login_type = mixed 啟用了 sql 身份驗證。sql 身份驗證憑證將使用 wssecurity 用戶名稱標(biāo)記標(biāo)頭作為 soap 數(shù)據(jù)包的一部分發(fā)送。管理員能按每個終結(jié)點設(shè)置基于 ip 的限制,以通過僅允許特定的 ip 或 ip 范圍訪問 http 終結(jié)點來限制對終結(jié)點的訪問。從概念上講,“終結(jié)點”就是一個“應(yīng)用程序”,實現(xiàn)單個應(yīng)用程序的所有方法均映射到終結(jié)點,因此安全機(jī)制應(yīng)用到終結(jié)點以控制對應(yīng)用程序的訪問。終結(jié)點通過設(shè)計進(jìn)行保護(hù);下面列出一些可以幫助保證終結(jié)點安全的事項。

  ◆默認(rèn)關(guān)閉。不映射任何默認(rèn)終結(jié)點或 web 方法;必須顯式地創(chuàng)建和指定。

  ◆安全檢查也應(yīng)用到對象,因此,映射的存儲過程僅在用戶對終結(jié)點具有連接權(quán)限且對存儲過程具有執(zhí)行權(quán)限時才可以執(zhí)行。

  ◆不支持匿名連接到終結(jié)點。所有請求(包括 wsdl 請求)均要通過身份驗證。為了提交任何請求,客戶端必須根據(jù) sql server 原則進(jìn)行身份驗證。

  當(dāng)創(chuàng)建了終結(jié)點后,只有系統(tǒng)管理員角色和終結(jié)點所有者的成員才能連接到該終結(jié)點。必須向用戶授予訪問終結(jié)點的連接權(quán)限;此操作是通過執(zhí)行以下語句實現(xiàn)的:

grant connect on http endpoint::hello_world_endpoint to [domainuser]

  非 microsoft 平臺上的客戶端可以通過使用基本身份驗證或 sql 身份驗證連接到 sql server。不過使用基本身份驗證或 sql 身份驗證要求保證通道的安全,以使用戶只能在啟用了 ssl 的端口上進(jìn)行連接。

,歡迎訪問網(wǎng)頁設(shè)計愛好者web開發(fā)。|||

  wsdl

  wsdl 是以 xml 編寫的用于描述 web 服務(wù)的文檔。它指定服務(wù)的位置和服務(wù)公開的操作(或方法)。wsdl 提供了客戶端與 web 服務(wù)交互所必需的信息。

  visual studio .net 和 jbuilder 一類的工具將使用 wsdl 生成代理代碼,應(yīng)用程序可使用此代理代碼與 web 服務(wù)進(jìn)行通信。如果終結(jié)點啟用了 wsdl,該終結(jié)點將在收到 wsdl 請求時產(chǎn)生 wsdl。當(dāng)向本文早些時候創(chuàng)建的終結(jié)點發(fā)送已通過身份驗證的請求時,它將產(chǎn)生 wsdl。wsdl 請求是簡單的窗體 http get 請求。

  服務(wù)器將查詢與終結(jié)點相關(guān)的元數(shù)據(jù),并動態(tài)生成 wsdl。生成的 wsdl 提供了存儲過程參數(shù)的豐富類型說明。服務(wù)器可以生成不同風(fēng)格的 wsdl,根據(jù)是使用基元 xsd 類型還是復(fù)雜類型來描述請求/響應(yīng)消息中的參數(shù),我們分別將之稱為簡單 wsdl 和復(fù)雜 wsdl。默認(rèn)使用復(fù)雜類型。

  soap rpc:方法調(diào)用

  在上面創(chuàng)建的終結(jié)點中,我們已將此存儲過程 master.dbo.hello_world 作為 web 方法公開,而 web 方法可以通過 soap rpc 執(zhí)行。以下是一個 soap 消息的示例,該消息通過 http 發(fā)送到服務(wù)器以通過 soap 調(diào)用此 sp。

<soap-env:envelope
<soap:binding transport="http://schemas.xmlsoap.org/soap/http"
<soap:body use="literal" />
<hello_world xmlns="http://tempuri.org/">
<msg>hello world!</msg>
</hello_world>
<soap:body use="literal" />
</soap-env:envelope>

  結(jié)果將為一個包含以下內(nèi)容的 soap 包封:

<sqlrowset1 xmlns="urn:schemas-microsoft-com:sql:sqlrowset1">
<row>
<message>hello world!</message>
</row>
</sqlrowset1>

  批處理:即席查詢

|||

  當(dāng)通過使用 t-sql 命令在終結(jié)點上啟用了批處理時,另一個 soap 方法(名為“sqlbatch”)將隱式地在終結(jié)點上公開。sqlbatch 方法允許通過 soap 執(zhí)行 t-sql 語句。此方法采用兩個參數(shù)。第一個參數(shù)名為“<batchcommands>”,是批量的 t-sql 語句。第二個參數(shù)名為“<parameters>”;如果 t-sql 語句使用了任何參數(shù),它將包含一個參數(shù)信息的數(shù)組。例如,下面是 soap 請求的請求體,其中調(diào)用了 sqlbatch 方法,并執(zhí)行一個參數(shù)化的查詢。

<sqlbatch xmlns="http://schemas.microsoft.com/sqlserver/2001/12/soap">
<batchcommands>
select employeeid, loginid, gender
from employee
where [email protected]
for xml auto;
</batchcommands>
<parameters>
<sqlparameter name="x" sqldbtype="int" maxlength="20"
xmlns="http://schemas.microsoft.com/sqlserver/2001/12/soap/types/sqlparameter">
<value xsi:type="xsd:string">1</value>
</sqlparameter>
</parameters>
</sqlbatch>

  此 soap 請求的響應(yīng)將包括以下內(nèi)容:

<sqlresultstream:sqlxml xsi:type="sqlsoaptypes:sqlxml">
<sqlxml>
<employees employeeid="1" firstname="nancy" lastname="davolio"/>
</sqlxml>
</sqlresultstream:sqlxml>

  管理

  我們已經(jīng)了解了創(chuàng)建終結(jié)點并根據(jù)終結(jié)點提交 soap 請求非常簡單。由于現(xiàn)在僅須管理一個組件(即 sql server),所以管理得到了簡化。我們不需要管理 iis 組件。終結(jié)點抽象為管理員提供了更大的靈活性,他們可以啟用 ip 篩選。這還消除了打開另一個端口的需要,因為我們可以重新使用供 http/https web 通信使用的端口。通過僅顯式地向特定的個體授予 connect 特權(quán),還可以僅向這些用戶提供對終結(jié)點的訪問權(quán)限。

  結(jié)束語

  通過使用本機(jī) soap 訪問,我們已提供了基于應(yīng)用廣泛并有相應(yīng)文檔說明的標(biāo)準(zhǔn)(如 soap/http)的協(xié)議,用以訪問 sql server。這樣使得更多類型的客戶端可以連接到 sql server,從而加強(qiáng)了互操作性,并更方便擴(kuò)展。



發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 邢台市| 德州市| 柘荣县| 连江县| 宜章县| 水城县| 陆丰市| 安仁县| 林州市| 靖西县| 长沙县| 远安县| 双牌县| 芮城县| 健康| 防城港市| 万年县| 陆川县| 张家港市| 哈巴河县| 桑植县| 腾冲县| 鄱阳县| 莱芜市| 思南县| 肇源县| 丰顺县| 闵行区| 凤城市| 奉新县| 轮台县| 普格县| 雅安市| 黄石市| 连江县| 绵竹市| 都兰县| 军事| 南康市| 永嘉县| 延庆县|