明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

ASP.NET創(chuàng)建XML Web服務(wù)全接觸(14)

[摘要]部署一個(gè)XML Web服務(wù)包括復(fù)制.asmx文件和任何XML Web服務(wù)使用的匯編文件,而不要把Microsoft.NET Framework的一部分作為Web服務(wù)器上的虛擬目錄。有關(guān)如何部署一個(gè)XML Web服務(wù)的信息,請(qǐng)參見"部署XML Web服務(wù)"。XML Web服務(wù)對(duì)使...

    

  部署一個(gè)XML Web服務(wù)包括復(fù)制.asmx文件和任何XML Web服務(wù)使用的匯編文件,而不要把Microsoft.NET Framework的一部分作為Web服務(wù)器上的虛擬目錄。有關(guān)如何部署一個(gè)XML Web服務(wù)的信息,請(qǐng)參見"部署XML Web服務(wù)"。XML Web服務(wù)對(duì)使用發(fā)現(xiàn)機(jī)制的用戶適用。用戶可以瀏覽一個(gè)特殊的發(fā)現(xiàn)文件或Web服務(wù)器的根來(lái)定位發(fā)現(xiàn)文件。從這些文件中,他們可以判斷那些服務(wù)對(duì)他們來(lái)說(shuō)有用。

  部署XML Web服務(wù)

  部署一個(gè)XML Web服務(wù)包括把.asmx文件和任何XML Web服務(wù)使用的匯編文件,而不是Microsoft.NET Framework的一部分,復(fù)制到Web服務(wù)器上。

  例如,假設(shè)你把一個(gè)XML Web服務(wù)命名為StockServices。為了部署XML Web服務(wù),你需要在你的Web服務(wù)器上創(chuàng)建一個(gè)虛擬目錄和把XML Web服務(wù)的.asmx文件放入這個(gè)目錄。這個(gè)虛擬目錄還應(yīng)該是一個(gè)IIS Web應(yīng)用程序,雖然它不是必需的。一個(gè)典型的部署將有下面的目錄結(jié)構(gòu):

\Inetpub
\Wwwroot
\StockServices
StockServices.asmx
\Bin


  你的XML Web服務(wù)使用的匯編不是Microsoft.NET Framework一部分的。

  XML Web服務(wù)發(fā)布的條目

  當(dāng)你發(fā)布一個(gè)XML Web服務(wù)時(shí),下列條目用來(lái)部署一個(gè)Web服務(wù)器。

條目

描述

Web應(yīng)用程序目錄

作為你的XML Web服務(wù)的根目錄。所有的文件都存放在這個(gè)目錄中。這個(gè)目錄應(yīng)該被標(biāo)記為一個(gè)IIS Web應(yīng)用程序所用。

<MyXMLWebService>.asmx 文件

調(diào)用XML Web服務(wù)的客戶端的基本URL。這個(gè)文件可以為任何有效的文件名。

<MyXMLWebService>.disco文件

(可選的)作為XML Web服務(wù)的發(fā)現(xiàn)機(jī)制。.disco文件不會(huì)自動(dòng)地為XML Web服務(wù)創(chuàng)建。這個(gè)文件可以為任何有效的文件名。

Web.config文件

(可選擇的)如果你需要覆蓋默認(rèn)配置設(shè)置,你可以包含一個(gè)web.config文件。XML Web服務(wù)使用這個(gè)配置文件來(lái)允許系統(tǒng)的定制和可擴(kuò)展性。例如,如果在系統(tǒng)中你的XML Web服務(wù)需要驗(yàn)證而其他的Web應(yīng)用程序不需要的話,你可以提供一個(gè)該XML Web服務(wù)特定的web.config文件。

\Bin目錄

包含用于這個(gè)XML Web服務(wù)的二進(jìn)制文件。如果你的XML Web服務(wù)類和.asmx文件不在同一個(gè)目錄下,那么包含類的部件必須在\Bin目錄中。


  發(fā)現(xiàn)一個(gè)XML Web服務(wù)

  XML Web服務(wù)發(fā)現(xiàn)是定位和詢問(wèn)XML Web服務(wù)描述的過(guò)程,這是訪問(wèn)一個(gè)XML Web服務(wù)的預(yù)備步驟。通過(guò)發(fā)現(xiàn)過(guò)程,XML Web服務(wù)客戶端可以在設(shè)計(jì)時(shí)得知一個(gè)XML Web服務(wù)存在,它能做什么以及如何適當(dāng)?shù)呐c之交互。

  可以在XML Web服務(wù)發(fā)布一個(gè).disco文件時(shí)編程發(fā)現(xiàn),.disco是一個(gè)包含與其它發(fā)現(xiàn)文檔、XSD模式和服務(wù)描述連接的XML文檔。換句話說(shuō),使用ASP.NET創(chuàng)建的XML Web服務(wù)自動(dòng)地有提供一個(gè)產(chǎn)生發(fā)現(xiàn)文檔的能力。當(dāng)使用帶有?DISCO的URL訪問(wèn)時(shí),一個(gè)發(fā)現(xiàn)文檔自動(dòng)地為XML Web服務(wù)生成。例如,如果到一個(gè)XML Web服務(wù)的URL是www.contoso.com/getquote.asmx,然后自動(dòng)以www.contoso.com/getquote.asmx?DISCO生成一個(gè)發(fā)現(xiàn)文檔。

  為了使能發(fā)現(xiàn)一個(gè)XML Web服務(wù):

  使用你喜歡的編輯器創(chuàng)建一個(gè)XML文檔,把標(biāo)記<?xml version="1.0"?>添加到第一行。

  在這個(gè)XML文檔內(nèi)添加一個(gè)<discovery>元素,如:

<disco:discovery xmlns:disco="http://schemas.xmlsoap.org/disco/">
</disco:discovery>


  在<discovery>元素內(nèi),添加到服務(wù)描述、XSD模式和其他發(fā)現(xiàn)文檔的引用。

  你可以添加對(duì)任意你想公開的引用。服務(wù)描述引用在一個(gè)發(fā)現(xiàn)文檔中通過(guò)使用http://schemas.xmlsoap.org/disco/scl/ XML域名空間添加一個(gè)<contractRef>元素來(lái)指定。同樣地,對(duì)其它的發(fā)現(xiàn)文檔和XSD模式的引用分別通過(guò)添加<discoveryRef>和<schemaRef> XML元素來(lái)指定。對(duì)于XSD模式引用,必須指定XML域名空間http://schemas.xmlsoap.org/disco/schema。。下面的代碼示例有對(duì)于發(fā)現(xiàn)文檔、服務(wù)描述和一個(gè)XSD模式的引用。

<?xml version="1.0"?>
<discovery xmlns="http://schemas.xmlsoap.org/disco/">
<discoveryRef ref="/Folder/Default.disco"/>
<contractRef ref="http://MyWebServer/UserName.asmx?WSDL"
docRef="Service.htm"
xmlns="http://schemas.xmlsoap.org/disco/scl/"/>
<schemaRef ref="Schema.xsd"
xmlns="http://schemas.xmlsoap.org/disco/schema/"/>
</discovery>


  引用可以與發(fā)現(xiàn)文檔存在于的目錄有關(guān),就如在discoveryRef元素所示,或與一個(gè)URI有關(guān),就如在contractRef元素所示。

  通過(guò)復(fù)制發(fā)現(xiàn)文檔到Web服務(wù)器的一個(gè)虛擬目錄下,把發(fā)現(xiàn)文檔部署到這臺(tái)Web服務(wù)器上。

  選擇性地,如果你想要通過(guò)指定一個(gè)IIS應(yīng)用程序而不需要指定一個(gè)文檔來(lái)允許預(yù)期消耗者導(dǎo)航到一個(gè)URL,那么你可以添加一個(gè)到IIS應(yīng)用程序的默認(rèn)的頁(yè)面。這對(duì)預(yù)期消耗者有益,他們不必知道任意發(fā)現(xiàn)文檔的名稱。用戶可以提供想下面發(fā)現(xiàn)過(guò)程中的URL:
http://MyWebServer/MyWebApplication

  如果用于Web應(yīng)用程序的默認(rèn)頁(yè)面是一個(gè)HTML頁(yè)面:

  在用于Web服務(wù)器的默認(rèn)Web的頁(yè)面的<head>標(biāo)記中添加一個(gè)鏈接到發(fā)現(xiàn)文檔。例如,如果你命名你的發(fā)現(xiàn)文檔MyWebService.disco并把它放入與默認(rèn)頁(yè)面相同的目錄中,你需要放置下面的標(biāo)記到默認(rèn)的Web頁(yè)面中。

<HEAD>
<link type='text/xml' rel='alternate' href='MyWebService.disco'/>
</HEAD>


  如果用于Web應(yīng)用程序的默認(rèn)頁(yè)面是一個(gè)XML文檔:

  在用于Web服務(wù)器的默認(rèn)Web的頁(yè)面的<head>標(biāo)記中添加一個(gè)鏈接到發(fā)現(xiàn)文檔。例如,如果你命名你的發(fā)現(xiàn)文檔MyWebService.disco并把它放入與默認(rèn)頁(yè)面相同的目錄中,你需要放置下面的代碼到默認(rèn)的Web頁(yè)面的頂端。

<?xml-stylesheet type="text/xml" alternate="yes" href="MyWebService.disco" ?>

 
  選擇性地,如果你使用Visual Studio.NET,你可以開啟動(dòng)態(tài)的發(fā)現(xiàn)來(lái)允許XML Web服務(wù)客戶端應(yīng)用程序來(lái)在一個(gè)沒(méi)有創(chuàng)建發(fā)現(xiàn)文檔的Web服務(wù)器上發(fā)現(xiàn)可用的XML Web服務(wù)。當(dāng)動(dòng)態(tài)發(fā)現(xiàn)開啟的時(shí)候,客戶應(yīng)用程序在Add Web Reference對(duì)話框中指定一個(gè)引用帶有.vsdisco部分的文件的URL,例如www.contoso.com/default.vsdisco,來(lái)代替特定的發(fā)現(xiàn)文檔。

  為了開啟用于一個(gè)Web服務(wù)器的動(dòng)態(tài)發(fā)現(xiàn),要修改machine.config來(lái)添加下面的<add>元素。

<configuration>
<system.web>
<httpHandlers>
<add verb="*" path="*.vsdisco"
type="System.Web.Services.Discovery.DiscoveryRequestHandler,
System.Web.Services, Version=1.0.3300.0,
Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
validate="false"/>
</httpHandlers>
</system.web>
</configuration>


  注意:當(dāng)動(dòng)態(tài)發(fā)現(xiàn)開啟的時(shí)候,所有的XML Web服務(wù)和存在于Web服務(wù)器的發(fā)現(xiàn)文檔都是可發(fā)現(xiàn)的。因此,當(dāng)開啟動(dòng)態(tài)發(fā)現(xiàn)時(shí)必須小心,因?yàn)槿绻鸚eb服務(wù)器不在帶有隔火墻的安全網(wǎng)絡(luò)中的話,它可能會(huì)在無(wú)意中暴露敏感數(shù)據(jù)。