2007-08-08

ASP.NET 2.0 創建Web服務之發布和部署


部署一個XML Web服務包括複製.asmx文件和任何XML Web服務使用的匯編文件,而不要把Microsoft.net Framework的一部分作為Web服務器上的虛擬目錄。有關如何部署一個XML Web服務的信息,請參見"部署XML Web服務"。XML Web服務對使用發現機制的用戶適用。用戶可以瀏覽一個特殊的發現文件或Web服務器的根來定位發現文件。從這些文件中,他們可以判斷那些服務對他們來說有用。

  部署XML Web服務

  部署一個XML Web服務包括把.asmx文件和任何XML Web服務使用的匯編文件,而不是Microsoft.NET Framework的一部分,複製到Web服務器上。

  例如,假設你把一個XML Web服務命名為StockServices。為了部署XML Web服務,你需要在你的Web服務器上創建一個虛擬目錄和把XML Web服務的.asmx文件放入這個目錄。這個虛擬目錄還應該是一個IIS Web應用程序,雖然它不是必需的。一個典型的部署將有下面的目錄結構:

\Inetpub
\Wwwroot
\StockServices
StockServices.asmx
\Bin

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


XML Web服务发布的条目

  当你发布一个XML Web服务时,下列条目用来部署一个Web服务器。

條目描述
Web應用程式目錄作為你的XML Web服務的根目錄。所有的文件都存放在這個目錄中。這個目錄應該被標記為一個IIS Web應用程序所用。
<MyXMLWebService>.asmx 文件調用XML Web服務的客戶端的基本URL。這個文件可以為任何有效的文件名。
<MyXMLWebService>.disco文件(可選的)作為XML Web服務的發現機制。.disco文件不會自動地為XML Web服務創建。這個文件可以為任何有效的文件名。
Web.config文件(可選擇的)如果你需要覆蓋默認配置設置,你可以包含一個web.config文件。XML Web服務使用這個配置文件來允許系統的定制和可擴展性。例如,如果在系統中你的XML Web服務需要驗證而其他的Web應用程序不需要的話,你可以提供一個該XML Web服務特定的web.config文件。
\Bin目錄包含用於這個XML Web服務的二進制文件。如果你的XML Web服務類和.asmx文件不在同一個目錄下,那麼包含類的部件必須在\Bin目錄中。


http://localhost/Service1.asmx?wsdl
http://localhost/Service1.asmx?disco


發現一個XML Web服務
  XML Web服務發現是定位和詢問XML Web服務描述的過程,這是訪問一個XML Web服務的預備步驟。通過發現過程,XML Web服務客戶端可以在設計時得知一個XML Web服務存在,它能做什麼以及如何適當的與之交互。

  可以在XML Web服務發布一個.disco文件時編程發現,.disco是一個包含與其它發現文檔、XSD模式和服務描述連接的XML文檔。換句話說,使用ASP.NET創建的XML Web服務自動地有提供一個產生發現文檔的能力。當使用帶有?DISCO的URL訪問時,一個發現文檔自動地為XML Web服務生成。例如,如果到一個XML Web服務的URL是www.contoso.com/getquote.asmx,然後自動以www.contoso.com/getquote.asmx?DISCO生成一個發現文檔。

  為了使能發現一個XML Web服務:

  使用你喜歡的編輯器創建一個XML文檔,把標記<?xml version="1.0"?>添加到第一行。

  在這個XML文檔內添加一個<discovery>元素,如:


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

  在<discovery>元素內,添加到服務描述、XSD模式和其他發現文檔的引用。

  你可以添加對任意你想公開的引用。服務描述引用在一個發現文檔中通過使用http://schemas.xmlsoap.org/disco/scl/ XML域名空間添加一個<contractRef>元素來指定。同樣地,對其它的發現文檔和XSD模式的引用分別通過添加<discoveryRef>和<schemaRef> XML元素來指定。對於XSD模式引用,必須指定XML域名空間http://schemas.xmlsoap.org/disco/schema。。下面的代碼示例有對於發現文檔、服務描述和一個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>

  引用可以與發現文檔存在於的目錄有關,就如在discoveryRef元素所示,或與一個URI有關,就如在contractRef元素所示。

  通過複製發現文檔到Web服務器的一個虛擬目錄下,把發現文檔部署到這台Web服務器上。

  選擇性地,如果你想要通過指定一個IIS應用程序而不需要指定一個文檔來允許預期消耗者導航到一個URL,那麼你可以添加一個到IIS應用程序的默認的頁面。這對預期消耗者有益,他們不必知道任意發現文檔的名稱。用戶可以提供想下面發現過程中的URL:
http://MyWebServer/MyWebApplication

  如果用於Web應用程序的默認頁面是一個HTML頁面:

  在用於Web服務器的默認Web的頁面的<head>標記中添加一個鏈接到發現文檔。例如,如果你命名你的發現文檔MyWebService.disco並把它放入與默認頁面相同的目錄中,你需要放置下面的標記到默認的Web頁面中。

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

  如果用於Web應用程序的默認頁面是一個XML文檔:

  在用於Web服務器的默認Web的頁面的<head>標記中添加一個鏈接到發現文檔。例如,如果你命名你的發現文檔MyWebService.disco並把它放入與默認頁面相同的目錄中,你需要放置下面的代碼到默認的Web頁面的頂端。

<?xml-stylesheet type="text/xml" alternate="yes" href="MyWebService.disco" ?>
  
  選擇性地,如果你使用Visual Studio.NET,你可以開啟動態的發現來允許XML Web服務客戶端應用程序來在一個沒有創建發現文檔的Web服務器上發現可用的XML Web服務。當動態發現開啟的時候,客戶應用程序在Add Web Reference對話框中指定一個引用帶有.vsdisco部分的文件的URL,例如www.contoso.com/default.vsdisco,來代替特定的發現文檔。

  為了開啟用於一個Web服務器的動態發現,要修改machine.config來添加下面的<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>

  注意:當動態發現開啟的時候,所有的XML Web服務和存在於Web服務器的發現文檔都是可發現的。因此,當開啟動態發現時必須小心,因為如果Web服務器不在帶有隔火墻的安全網絡中的話,它可能會在無意中暴露敏感數據。

adsense