黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

SQL Server 本機(jī) Web 服務(wù)的使用方案

系統(tǒng) 3480 0

SQL Server 本機(jī) Web 服務(wù)的使用方案

發(fā)布日期: 7/13/2005 | 更新日期: 7/13/2005

Srik Raghavan
Microsoft Corporation

適用于:
SQL Server
Web 服務(wù)

摘要: 獲得有關(guān)如何設(shè)置 SQL Server 以便在異類(lèi)環(huán)境中進(jìn)行 Web 服務(wù)訪(fǎng)問(wèn)的詳細(xì)討論,并且了解更多有關(guān) SQL Server 中 Web 服務(wù)的主要方案的信息。

下載相關(guān)的 WebServicePerlScript.exe 代碼示例。

*

本頁(yè)內(nèi)容
簡(jiǎn)介 簡(jiǎn)介
異類(lèi)訪(fǎng)問(wèn) 異類(lèi)訪(fǎng)問(wèn)
使用 Perl 腳本進(jìn)行管理和監(jiān)視 使用 Perl 腳本進(jìn)行管理和監(jiān)視
其他方案 其他方案
小結(jié) 小結(jié)

簡(jiǎn)介

在 SQL Server 中,我們向數(shù)據(jù)庫(kù)引擎中添加了對(duì)本機(jī) XML Web 服務(wù)的支持。這一功能是圍繞眾所周知的標(biāo)準(zhǔn)(如 SOAP 1.2、WSDL 1.1 和 HTTP)設(shè)計(jì)的。將解決方案建立在這些標(biāo)準(zhǔn)之上,可以在大多數(shù)企業(yè)都擁有的異類(lèi)環(huán)境中支持互操作性和服務(wù)擴(kuò)張。

添加到 SQL Server 中的新的基礎(chǔ)結(jié)構(gòu)大大有利于直接向服務(wù)器外部公開(kāi) Web 服務(wù),這是因?yàn)閷⒈緳C(jī) SOAP 堆棧內(nèi)置到數(shù)據(jù)庫(kù)引擎中消除了使用中間層進(jìn)程(如 IIS)達(dá)到這一目標(biāo)的需要。它還使 SQL Server 能夠作為組件參與面向服務(wù)的體系結(jié)構(gòu),因?yàn)榉?wù)在這些新的體系結(jié)構(gòu)中提供了黏合劑。本機(jī) XML Web 服務(wù)使您既可以將存儲(chǔ)過(guò)程作為 Web 服務(wù)公開(kāi),而且可以針對(duì)數(shù)據(jù)庫(kù)服務(wù)器執(zhí)行特殊的 T-SQL 語(yǔ)句。實(shí)際上,我們已經(jīng)基于 SOAP 創(chuàng)建了一種新的訪(fǎng)問(wèn) SQL Server 的機(jī)制;SOAP 提供了與當(dāng)前的 Tabular Data Stream (TDS) 專(zhuān)用二進(jìn)制協(xié)議幾乎相同的功能。

我們首先詳細(xì)考察如何設(shè)置 SQL Server 以便在異類(lèi)環(huán)境中進(jìn)行 Web 服務(wù)訪(fǎng)問(wèn)。我們將查看如何使用 Perl 腳本進(jìn)行數(shù)據(jù)庫(kù)管理,并且簡(jiǎn)要考察一下其他可以使用本機(jī) Web 服務(wù)的方案。

異類(lèi)訪(fǎng)問(wèn)

請(qǐng)考慮這樣一個(gè)環(huán)境,在這里,運(yùn)行在非 Microsoft 操作系統(tǒng)上的應(yīng)用程序需要連接到 SQL Server。對(duì)于此類(lèi)應(yīng)用程序,我們的建議是使用 SQL Server 授權(quán) (SQL-Auth) 連接到 SQL Server Web 服務(wù)。讓我們考察一下該機(jī)制是如何工作的。

要公開(kāi) Web 服務(wù),用戶(hù)需要做的第一件事情是創(chuàng)建一個(gè)終結(jié)點(diǎn)。請(qǐng)觀(guān)察如下所示的用于創(chuàng)建終結(jié)點(diǎn)的數(shù)據(jù)定義語(yǔ)言 (DDL) 語(yǔ)句。它將一個(gè)名為“GetCustomerInfo”的存儲(chǔ)過(guò)程公開(kāi)為 Web 服務(wù)。

盡管術(shù)語(yǔ) WEBMETHOD 在概念上與 ASP.NET 中的 [WebMethod] 相同,但它在其他方面與 ASP.NET 無(wú)關(guān)。

      CREATE  ENDPOINT sql_auth_endpoint

STATE = STARTED

AS HTTP(

  SITE = '*', 

  PATH = '/sql/sql_auth', 

  AUTHENTICATION = (BASIC),

   PORTS=(SSL)   

)    

FOR SOAP(

  WEBMETHOD'GetCustomerInfo' 

(

           name='AdventureWorks.dbo.GetCustomerInfo', 

           schema=STANDARD

) ,

  LOGIN_TYPE = MIXED,

  WSDL = DEFAULT,

  DATABASE = 'AdventureWorks',

  BATCHES=ENABLED,

  NAMESPACE = 'http://Adventure-Works/Customers/'

) 


    

為了保持 SQL Server 中的“設(shè)計(jì)安全”主題,我們?cè)谌魏吻闆r下都不允許對(duì) SQL Server 進(jìn)行 ANONYMOUS 訪(fǎng)問(wèn)。這意味著所有連接都需要使用受支持的身份驗(yàn)證方案之一在 HTTP 傳輸級(jí)別進(jìn)行身份驗(yàn)證。BASIC 是最常見(jiàn)和使用最廣泛的身份驗(yàn)證模型之一,因?yàn)樗艿酱蠖鄶?shù)客戶(hù)端的支持。但是,它也是最不安全的選擇,因?yàn)樗笠悦魑陌l(fā)送密碼。為了避免該問(wèn)題,我們要求每當(dāng)選擇 BASIC 作為身份驗(yàn)證類(lèi)型時(shí),都要為 SSL 啟用終結(jié)點(diǎn)。要啟用 SSL,必須執(zhí)行以下命令:

      httpcfg set ssl /i IP:Port /h Hash /g Guid


    

其中,Hash 是證書(shū)哈希,Guid 是一個(gè)標(biāo)識(shí)注冊(cè)該證書(shū)的實(shí)體的全局唯一標(biāo)識(shí)符 (GUID) 字符串。用戶(hù)可以通過(guò)在 Certificate 中查找 Thumbprint 值來(lái)獲取證書(shū)的哈希值。作為最佳實(shí)施策略,請(qǐng)為 SQL Server 的每個(gè)實(shí)例創(chuàng)建單個(gè) GUID,并且對(duì)于該實(shí)例執(zhí)行的所有證書(shū)注冊(cè),都使用同一個(gè) GUID。您可以使用任何工具來(lái)發(fā)現(xiàn)該 GUID 值。Httpcfg.exe 隨附了 Windows 支持工具。

因此,在該示例中,它將成為:

      httpcfg set ssl /i 1.1.1.1:443 /h 4463b7899c499a38812a7bbe7d73f4d31d026b2f /g "{2bb50d9c-7f6a-4d6f-873d-5aee7fb43290}"


    

其中,1.1.1.1 會(huì)被宿主 SQL Server 的計(jì)算機(jī)的 IP 地址替換。

那么,如何在終結(jié)點(diǎn)上啟用 SQL-Auth 呢?這是通過(guò)在終結(jié)點(diǎn)語(yǔ)法的 payload 節(jié)中指定“LOGIN_TYPE=MIXED”完成的。通過(guò)指定“MIXED”,您可以使用集成式或 SQL 身份驗(yàn)證對(duì) SQL Server 實(shí)例進(jìn)行身份驗(yàn)證?,F(xiàn)在,我們使 SQL 憑據(jù)能夠作為有效負(fù)載(消息)的一部分流動(dòng)。在完成該工作時(shí),我們已經(jīng)小心地確保傳輸憑據(jù)的 SOAP 標(biāo)頭與 WS-Security Username 標(biāo)記相匹配。遵循 WS-Security 標(biāo)準(zhǔn)自然可以提高互操作性;例如,只需很少的幾行代碼,就可以使用 Web Services Enhancements 2.0 for Microsoft .NET (WSE) 生成用戶(hù)名標(biāo)記 SOAP 標(biāo)頭。

正如您可以在上述討論中看到的那樣,存在兩種級(jí)別的身份驗(yàn)證:

?

傳輸級(jí)別

?

消息級(jí)別

現(xiàn)在,讓我們深入探討這兩個(gè)級(jí)別的身份驗(yàn)證是如何工作的。

所有請(qǐng)求總是在傳輸級(jí)別進(jìn)行身份驗(yàn)證。因此,如果用戶(hù)提交無(wú)效的 BASIC 身份驗(yàn)證憑據(jù),則連接失敗,并且發(fā)生 HTTP 401 訪(fǎng)問(wèn)被拒絕錯(cuò)誤。如果用戶(hù)成功地在傳輸級(jí)別進(jìn)行身份驗(yàn)證,則我們具有兩個(gè)選擇。我們可以使用傳輸憑據(jù)或作為 SOAP 消息的一部分到來(lái)的憑據(jù)登錄 SQL Server。所選的憑據(jù)是由 SOAP 消息中是否存在 SQL-Auth 憑據(jù)確定的。如果 SOAP 消息中存在憑據(jù),則我們將試圖使用 SQL-Auth 憑據(jù)登錄 SQL Server 數(shù)據(jù)庫(kù)。如果該方法失敗,則我們向用戶(hù)返回失敗,并且我們不會(huì)后退到使用 BASIC 身份驗(yàn)證憑據(jù)。如果 SOAP 消息中不存在憑據(jù),則我們將試圖使用傳輸憑據(jù)登錄 SQL Server。

包含 SQL 憑據(jù)的 SOAP 消息如下所示:

      <?xml version="1.0" encoding="utf-8"?>

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 

xmlns:xsd="http://www.w3.org/2001/XMLSchema">

 <soap:Header>

    <Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-

    200401-wss-wssecurity-secext-1.0.xsd" xmlns="http://docs.oasis-

open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">

      <wsse:UsernameToken>

        <wsse:Username>user</wsse:Username>

        <wsse:Password Type="http://docs.oasis-

        open.org/wss/2004/01/oasis-200401-wss-username-token-profile-

        1.0#PasswordText">

             password

       </wsse:Password>

      </wsse:UsernameToken>

    </Security>

  </soap:Header>

 <soap:Body>

   <GetCustomerInfoxmlns="http://Adventure-Works/Customers/">

     <CustomerID>1</CustomerID>

     <OutputParam>Hello World</OutputParam>

   </GetCustomerInfo>

 </soap:Body>

</soap:Envelope>


    

在 SOAP 消息中指定無(wú)效的憑據(jù)會(huì)產(chǎn)生以下 SOAP 錯(cuò)誤(該錯(cuò)誤被返回給用戶(hù)):

      <?xml version="1.0" encoding="utf-8"?>

<SOAP-ENV:Envelope xml:space="preserve" xmlns:xsd="http://www.w3.org/2001/XMLSchema" 

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-

ENV="http://schemas.xmlsoap.org/soap/envelope/" 

xmlns:sql="http://schemas.microsoft.com/sqlserver/2004/SOAP" 

xmlns:sqlsoaptypes="http://schemas.microsoft.com/sqlserver/2004/SOAP/types" 

xmlns:sqlrowcount="http://schemas.microsoft.com/sqlserver/2004/SOAP/types/SqlRowCount" 

xmlns:sqlmessage="http://schemas.microsoft.com/sqlserver/2004/SOAP/types/SqlMessage" 

xmlns:sqlresultstream="http://schemas.microsoft.com/sqlserver/2004/SOAP/types/SqlResultStream" 

xmlns:sqltransaction="http://schemas.microsoft.com/sqlserver/2004/SOAP/types/SqlTransaction" 

xmlns:sqltypes="http://schemas.microsoft.com/sqlserver/2004/sqltypes">

 <SOAP-ENV:Body>

   <SOAP-ENV:Fault xmlns:sqlsoapfaultcode="http://schemas.microsoft.com/sqlserver/2004/SOAP/SqlSoapFaultCode">

     <faultcode>SOAP-ENV:Client</faultcode>

     <faultstring>

        There was an error in the incoming SOAPrequest packet:  

        Client, LoginFailure, AccessDenied

     </faultstring>

     <faultactor>http://schemas.microsoft.com/sqlserver/2004/SOAP</faultactor>

     <detail xmlns:SOAP-1_2-ENV="http://www.w3.org/2003/05/soap-envelope">

       <SOAP-1_2-ENV:Code>

         <SOAP-1_2-ENV:Value>SOAP-1_2-ENV:Sender</SOAP-1_2-ENV:Value>

         <SOAP-1_2-ENV:Subcode>

           <SOAP-1_2-ENV:Value>sqlsoapfaultcode:LoginFailure</SOAP-1_2-ENV:Value>

           <SOAP-1_2-ENV:Subcode>

             <SOAP-1_2-ENV:Value>sqlsoapfaultcode:AccessDenied</SOAP-1_2-ENV:Value>

           </SOAP-1_2-ENV:Subcode>

         </SOAP-1_2-ENV:Subcode>

       </SOAP-1_2-ENV:Code>

       <SOAP-1_2-ENV:Reason>

         <SOAP-1_2-ENV:Text xml:lang="en-US">

           There was an error in the incoming SOAPrequest packet:  

           Sender, LoginFailure, AccessDenied

         </SOAP-1_2-ENV:Text>

       </SOAP-1_2-ENV:Reason>

       <SOAP-1_2-ENV:Node>https://srikr-800.redmond.corp.microsoft.com:443/sql/sql_auth</SOAP-1_2-ENV:Node>

       <SOAP-1_2-ENV:Role>

           http://schemas.microsoft.com/sqlserver/2004/SOAP

       </SOAP-1_2-ENV:Role>

       <SOAP-1_2-ENV:Detail />

     </detail>

   </SOAP-ENV:Fault>

 </SOAP-ENV:Body>

</SOAP-ENV:Envelope>


    

該解決方案只利用 HTTP、SOAP、BASIC 身份驗(yàn)證和 SSL,這使它對(duì)于異類(lèi)環(huán)境很理想。在下一部分中,我們將看到如何利用該解決方案來(lái)創(chuàng)建 Perl 腳本,以便直接連接到 SQL Server。

使用 Perl 腳本進(jìn)行管理和監(jiān)視

通過(guò) SQL Server 中的 Web 服務(wù),可以從任何具有 Web 服務(wù)支持的平臺(tái)連接到 SQL Server。為了說(shuō)明這一互操作性,我們將創(chuàng)建 Perl 腳本以連接到 SQL Server。Perl 被普遍用于創(chuàng)建腳本,以便幫助管理和監(jiān)視數(shù)據(jù)庫(kù)服務(wù)器。

下面的示例說(shuō)明了如何創(chuàng)建 Perl 腳本以監(jiān)視數(shù)據(jù)庫(kù)的狀態(tài)。SQL Server 已經(jīng)引入了對(duì)動(dòng)態(tài)管理視圖的支持,這些視圖提供了有關(guān)正在運(yùn)行的服務(wù)器的動(dòng)態(tài)狀態(tài)信息。在該示例中,我們創(chuàng)建了一個(gè) Perl 腳本,以便通過(guò)查詢(xún)名為 dm_exec_connections 的動(dòng)態(tài)視圖來(lái)監(jiān)視與數(shù)據(jù)庫(kù)之間的活動(dòng)連接的數(shù)量。

我們假設(shè)運(yùn)行這段代碼的計(jì)算機(jī)已經(jīng)正確安裝和配置了 Perl。

這里的示例使用 ActiveState 5.8.x Perl 軟件包。該腳本利用下列軟件包:

?

安裝 http://theoryx5.uwinnipeg.ca/ppms/Crypt-SSLeay.ppd

?

安裝 http://theoryx5.uwinnipeg.ca/ppms/XML-Parser.ppd

?

安裝 http://theoryx5.uwinnipeg.ca/ppms/libxml-perl.ppd

?

安裝 http://theoryx5.uwinnipeg.ca/ppms/XML-RegExp.ppd

?

安裝 http://theoryx5.uwinnipeg.ca/ppms/XML-DOM.ppd

在該示例中,我們需要 SSL,因?yàn)?Perl 應(yīng)用程序?qū)⑹褂?BASIC 身份驗(yàn)證和 SQL-Auth,并且 XML 軟件包需要分析響應(yīng)并顯示結(jié)果。

有關(guān)完整腳本的信息,請(qǐng)參見(jiàn)相關(guān)的 下載 。

下面的代碼塊將 SOAP Lite 軟件包實(shí)例化。我們需要明確要求將輸出格式化為 XML,以便可以分析響應(yīng)。

      my $soap = SOAP::Lite

 -> uri('http://Adventure-Works/Customers/')

 -> proxy('https://srikr-800/sql/sql_auth')

 -> outputxml(1);


    

接下來(lái),我們需要為該連接設(shè)置憑據(jù)。因?yàn)槲覀兇蛩闶褂?SQL-Auth,所以我們需要按如下方式初始化 UsernameToken 標(biāo)頭。

      # sample Yukon security SOAPheader

# <wsse:Security  xmlns:wsse="http://docs.oasis-

open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">

#   <wsse:UsernameToken>

#          <wsse:Username>sql_user</wsse:Username>

#       <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01

     /oasis-200401-wss-username-token-profile-1.0#PasswordText">

        foo-bar1

     </wsse:Password>

#   </wsse:UsernameToken>

# </wsse:Security>

my $Username = SOAP::Data->name('Username' => 'AdminUser');

my $Password = SOAP::Data->name('Password' => 'password')

           ->attr({Type => 'http://docs.oasis-open.org/wss/2004/01

           /oasis-200401-wss-username-token-profile-1.0#PasswordText'});

my $UsernameToken= SOAP::Data->name('UsernameToken')

           ->value(\SOAP::Data->value($Username, $Password));

my $security = SOAP::Header->name(Security)

           ->attr({'xmlns' => 'http://docs.oasis-open.org/wss

           /2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd'})

           ->value(\$UsernameToken);


    

BASIC 身份驗(yàn)證憑據(jù)是通過(guò)實(shí)現(xiàn)以下存根傳入的:

      sub SOAP::Transport::HTTP::Client::get_basic_credentials {

 return 'User' => 'Password';

}


    

建議不要在腳本文件中存儲(chǔ)/引用密碼。用戶(hù)在處理密碼時(shí)應(yīng)該遵循標(biāo)準(zhǔn)的安全準(zhǔn)則。

接下來(lái),我們調(diào)用 Web 方法。因?yàn)槲覀儗?zhí)行 T-SQL 批處理語(yǔ)句,所以代碼如下所示:

      #

# Invoking a sqlbatch to retrieve the number of connections 



$soap -> on_action (sub { return '""';});



$method = SOAP::Data->name('sqlbatch')->attr({xmlns => 

'http://schemas.microsoft.com/sqlserver/2004/SOAP'});

@param = ( SOAP::Data->name(BatchCommands => 'select session_id, 

net_transport, protocol_type from sys.dm_exec_connections'));


    

最后,我們分析 XML 響應(yīng)以檢索數(shù)據(jù):

      for my $node($doc->getElementsByTagName("row"))

{

 

 print "\n";

 for my $kid ($node->getChildNodes)

 {

   print $kid->getNodeName(); print ":: ";

   for my $gkid ($kid->getChildNodes)

     {

        print $gkid->getNodeValue();  #print the actual values for the columns

     }

   

   print "\t";

 }



 print "\n";

}


    

運(yùn)行該 Perl 腳本可以生成以下輸出:

      Testing SOAP::Lite client against AdventureWorks Contacts sample web service.

Calling sqlbatch

Server response...



Server response...

session_id:: 54 net_transport:: HTTP   protocol_type:: SOAP   

connection_id::5EC2B4E2-39A6-4FA7-BBDB-144DAED59A41



session_id:: 53 net_transport:: Shared memory   protocol_type:: TSQL   

connection_id:: 5AE50B7D-D919-4FBC-BA42-6069A12F4D30



session_id:: 53 net_transport:: Session protocol_type:: TSQL   

connection_id::05830BE9-F12F-429D-BBAC-E4EEB2C528EF    

parent_connection_id:: 5AE50B7D-D919-4FBC-BA42-6069A12F4D30


    

上述輸出表明與 SQL Server 之間存在兩個(gè)連接:一個(gè)連接使用二進(jìn)制協(xié)議 TDS,并且顯示為 protocol_type:: TSQL ;另一個(gè)連接對(duì)應(yīng)于在運(yùn)行該 Perl 腳本時(shí)生成的 SOAP/HTTP 連接。

我希望將您的注意力引到 session_id 列上面。該會(huì)話(huà)標(biāo)識(shí)符和與該請(qǐng)求關(guān)聯(lián)的數(shù)據(jù)庫(kù)引擎中的 spid(會(huì)話(huà)進(jìn)程標(biāo)識(shí)符)匹配。有兩個(gè)條目的 spid 等于 53,因?yàn)橐粋€(gè)對(duì)應(yīng)于物理連接(net_transport 是共享內(nèi)存),另一個(gè)對(duì)應(yīng)于在同一物理連接上進(jìn)行的邏輯會(huì)話(huà)。(有關(guān)多個(gè)活動(dòng)結(jié)果集的詳細(xì)信息,請(qǐng)參閱 Multiple Active Result Sets (MARS) in SQLServer 2 。)該邏輯會(huì)話(huà)的 parent_connection_id 與物理連接匹配這一事實(shí)證明了這一點(diǎn)。對(duì)于 TDS 而言,連接和會(huì)話(huà)緊密聯(lián)系在一起;換句話(huà)說(shuō),用戶(hù)無(wú)法從不同的物理連接加入現(xiàn)有的會(huì)話(huà)。SOAP 訪(fǎng)問(wèn)使用戶(hù)能夠通過(guò)在請(qǐng)求中指定適當(dāng)?shù)臅?huì)話(huà)標(biāo)頭來(lái)加入現(xiàn)有會(huì)話(huà)。在 SOAP 中使用多個(gè)會(huì)話(huà)這一主題需要專(zhuān)門(mén)撰文加以闡述。感興趣的讀者可以閱讀 SQL Server Books Online 來(lái)獲得有關(guān)如何啟用和使用會(huì)話(huà)的詳細(xì)信息。

其他方案

現(xiàn)在,讓我們考察其他一些方案。大多數(shù)數(shù)據(jù)庫(kù)應(yīng)用程序都在存儲(chǔ)過(guò)程中內(nèi)置了大量以數(shù)據(jù)為中心的邏輯。本機(jī) XML Web 服務(wù)通過(guò)使得將存儲(chǔ)過(guò)程公開(kāi)為 Web 服務(wù)變得非常容易來(lái)利用這一投資。另外,本機(jī) Web 服務(wù)還可以提高性能,因?yàn)閿?shù)據(jù)訪(fǎng)問(wèn)是在進(jìn)程內(nèi)發(fā)生的,而不是被發(fā)送到中間層進(jìn)程。

查找服務(wù)

當(dāng) SQL Server 宿主數(shù)據(jù)以供引用/查找時(shí),可以使用 Web 服務(wù)作為公開(kāi)該數(shù)據(jù)的理想機(jī)制。在該方案中,數(shù)據(jù)庫(kù)充當(dāng)大量數(shù)據(jù)的儲(chǔ)存庫(kù)。Web 服務(wù)利用數(shù)據(jù)庫(kù)引擎查詢(xún)處理功能來(lái)獲取結(jié)果。此類(lèi)查詢(xún)中的結(jié)果集定義良好,并且大約為幾個(gè) KB。此類(lèi)方案的示例包括:

?

產(chǎn)品目錄

?

向用戶(hù)返回特定于地區(qū)的信息(天氣、交通)的具有位置意識(shí)的 Web 服務(wù)。

?

用于 Intranet 的雇員目錄

報(bào)告生成服務(wù)

在很多方案中,數(shù)據(jù)庫(kù)服務(wù)器宿主作為報(bào)告基礎(chǔ)的數(shù)據(jù)。在 Intranet 內(nèi)部,將這些報(bào)告公開(kāi)為 Web 服務(wù)是很方便的。用戶(hù)可以輕松地創(chuàng)建 T-SQL 存儲(chǔ)過(guò)程,以便使用 SQL Server 中的 Web 服務(wù)生成和公開(kāi)報(bào)告。您還可以輕松地將 Web 服務(wù)的結(jié)果嵌入到 Office 應(yīng)用程序(如 Excel 和 InfoPath)中。這不僅使客戶(hù)端應(yīng)用程序可以更加容易地檢索數(shù)據(jù),而且還免除了數(shù)據(jù)庫(kù)管理員的支持附加基礎(chǔ)結(jié)構(gòu)以便公開(kāi) Web 服務(wù)的負(fù)擔(dān)。用戶(hù)還能夠使用本機(jī) Web 服務(wù)的批處理訪(fǎng)問(wèn)功能來(lái)運(yùn)行特殊查詢(xún)和生成報(bào)告。

跨平臺(tái)訪(fǎng)問(wèn)用戶(hù)定義的類(lèi)型

SQL Server 引入了對(duì)用戶(hù)定義類(lèi)型的支持。借助于用戶(hù)定義的類(lèi)型 (UDT),您可以擴(kuò)展數(shù)據(jù)庫(kù)的標(biāo)量類(lèi)型系統(tǒng)(不僅僅是為系統(tǒng)類(lèi)型定義您自己的別名 — 該功能在以前版本的 SQL Server 中已經(jīng)可用)。例如,您可以定義一個(gè)名為 Point 的 UDT 類(lèi)型,以捕獲點(diǎn)的 x 和 y 坐標(biāo)。本機(jī) Web 服務(wù)利用了公共語(yǔ)言運(yùn)行庫(kù)中提供的序列化框架,并且啟用了諸如 XML 之類(lèi)類(lèi)型的傳輸。然后,客戶(hù)端平臺(tái)可以將該 XML 反序列化為在其平臺(tái)上定義的對(duì)象。這就使 Java 客戶(hù)端能夠發(fā)送和接收 UDT 實(shí)例。

移動(dòng)方案

現(xiàn)在,任何能夠分析 XML 和提交 HTTP 請(qǐng)求的設(shè)備都可以訪(fǎng)問(wèn) SQL Server。有了這一前提,再加上在丟棄連接時(shí)重新加入現(xiàn)有會(huì)話(huà)的能力,非常適合于為移動(dòng)設(shè)備和不定時(shí)連接的設(shè)備開(kāi)發(fā)應(yīng)用程序,而這又使得隨時(shí)、隨地訪(fǎng)問(wèn) SQL Server 成為可能。

異步服務(wù)

可以將本機(jī) Web 服務(wù)與 SQL Service Broker(也通過(guò) SQL Server 提供)結(jié)合使用,以便構(gòu)建提供異步服務(wù)的解決方案。請(qǐng)考慮一個(gè)訂單處理工作流。您可以公開(kāi)一個(gè) SQL Server Web 服務(wù),該服務(wù)接收訂單,并且通過(guò)立即確認(rèn)它已經(jīng)收到了該訂單進(jìn)行響應(yīng)。然后,可以將該訂單輸入到服務(wù)代理程序隊(duì)列中,以便進(jìn)行處理。訂單的履行可能需要調(diào)用其他 Web 服務(wù)。在履行該訂單時(shí),我們可以使用客戶(hù)端已經(jīng)預(yù)訂的任何通知機(jī)制來(lái)通知該客戶(hù)端。

小結(jié)

本機(jī) XML Web 服務(wù)利用了您在數(shù)據(jù)庫(kù)服務(wù)器方面的投資,并且使您的數(shù)據(jù)庫(kù)能夠作為服務(wù)提供程序參與工作。我已經(jīng)詳細(xì)說(shuō)明了如何使用該功能提供對(duì)異類(lèi)環(huán)境中 SQL Server 中宿主的數(shù)據(jù)的訪(fǎng)問(wèn),并且描述了其他適合本機(jī) Web 服務(wù)的方案。本機(jī) XML Web 服務(wù)通過(guò)使范圍更為廣泛的客戶(hù)端能夠連接到 SQL Server,提高了互操作性,促進(jìn)了服務(wù)的擴(kuò)張。

SQL Server 本機(jī) Web 服務(wù)的使用方案


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論