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

來源:互聯網
上載者:User
asp.net|web|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目錄中。

   發現一個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伺服器不在帶有隔火牆的安全網路中的話,它可能會在無意中暴露敏感性資料。

 用ASP.NET建立的XML Web服務的配置選擇

  XML Web服務的配置遵循和所有的ASP.NET Web應用程式使用的相同的範式。ASP.NET配置是一個基於XML的文字檔配置結構,既強大又可擴充。設定檔只是一組XML元素,描述用於Microsoft.NET Framework的特定技術特性的配置選擇。就 XML Web服務而言,配置選擇是封裝在設定檔的webServices XML元素中的。

  配置訊息傳送協議和服務協助頁面

  用於XML Web服務訊息傳送協議和服務協助頁面在設定檔的<webServices>元素下的<protocols> XML元素中配置。通過添加<add>和<remove>元素來進行配置,制定設定檔範圍內的那個設定有效。<add>元素明確地添加對設定檔範圍內的設定的支援,而<remove>元素移除對更高的配置等級的支援。例如,可以使用Machine.config檔案中的<add>元素在機器層級添加一個通訊協定設定,然後使用Web.config檔案中的<remove>元素移除對某個Web應用程式的設定。下面的是<add>和<remove>元素的文法:

<{add|remove} name="protocol name" />

  <add>和<remove>元素的name屬性有下列選項:

設定 描述
HttpSoap 支援用於XML Web服務的SOAP協議的控制項。預設情況下安裝已經添加了這個支援。
HttpGet 支援用於XML Web服務的HTTP - GET協議的控制項。預設情況下安裝不添加這個支援。
HttpPost 支援用於XML Web服務的HTTP - POST協議的控制項,不管請求從何起源。預設情況下安裝不添加這個支援。
HttpPostLocalhost 當請求來源於本機電腦的時候,支援用於XML Web服務的HTTP - POST協議的控制項。如果HttpPost添加到當前配置中,那麼這個設定就無效了。預設情況下安裝已經添加了這個支援。
Documentation 指定一個服務協助頁面是否顯示。預設情況下安裝已經添加了這個支援。

  注意:.NET Framework 1.0版支援HttpSoap、HttpGet、HttpPost和Documentation設定和所有預設的機器層級能夠使用的設定。

   安全建議

  在使用用於XML Web服務的HTTP-GET或HTTP-POST協議之前,你應該知道這樣做可能把它暴露給無意的調用。例如,一個未料想到的使用者可能接收一個帶有XML Web服務鏈結接的電子郵件,點選連結,使用電子郵件中提供的參數調用XML Web服務。你應該在使用HTTP-GET或HTTP-POST協議之前,你應該考慮這種無意中的調用是否有害。

   使HTTP-GET和HTTP-POST協議對於整機失效

  使用你習慣的文本編輯程式開啟Machine.config檔案。(Machine.config檔案預設的地點在安裝目錄的\Config子目錄下。)

  如果webServices部分中有對HTTP-GET和HTTP-POST的支援,那麼就把這幾行注釋掉。在這樣做以後,webServices部分應該如下:

<webServices>
<protocols>
<add name="HttpSoap"/>
<!-- <add name="HttpPost"/> -->
<!-- <add name="HttpGet"/> -->
<add name="Documentation"/>
<add name="HttpPostLocalhost"/>
</protocols>
</webServices>

  儲存Machine.config。

  在下一次請求這台機器上的XML Web服務的時候,配置的改變將生效。

   使用於單獨Web應用程式的協議支援失效

  使用你習慣的編輯程式開啟Web應用程式根目錄下的Web.config。(如果無存在Web.config檔案,那麼就建立一個。)

  修改Web.config的webServices部分,明確的移除通訊協定設定。下面的樣本明確地移除HTTP- POST和HTTP- GET協議:

<webServices>
<protocols>
<remove name="HttpPost" />
<remove name="HttpGet" />
</protocols>
</webServices>

  儲存Web.config。

  在下一次請求這個Web應用程式的XML Web服務的時候,配置的改變將生效。

   服務協助頁面

  在一個Web瀏覽器中不使用任何參數導航到XML Web服務的URL能讓客戶查看這個XML Web服務的服務協助頁面,如果這個服務進行了這樣的配置。服務協助頁面預設情況下包含關於與XML Web服務通訊的方法以及XML Web服務方法的基本資料。因為服務協助頁面僅僅是一個ASP.NET Web表單,它可以被替換或者被修改成包含類似於公司標識這樣的條目。服務協助頁面的檔案名稱在設定檔的<wsdlHelpGenerator>XML元素中指定。服務協助頁面只用來顯示有在<protocols> XML元素指定的Documentation協議的設定檔範圍內的XML Web服務。預設情況下,Documentation在Machine.config檔案中指定。

  使服務協助頁面對於一個單獨的Web應用程式失效。

  使用你習慣的編輯程式開啟Web應用程式根目錄下的Web.config。(如果無存在Web.config檔案,那麼就建立一個。)

  修改Web.config的webServices部分,明確的移除Documentation協議。

<webServices>
<protocols>
<remove name="Documentation" />
</protocols>
</webServices>

  儲存Web.config。

  在下一次請求這個Web應用程式的XML Web服務的時候,配置的改變將生效。

  注意取消Documentation協議還禁止任何Web應用程式內用於XML Web服務的WSDL檔案產生。這防止用戶端產生代理類,除非建立一個自訂WSDL檔案來為為它們設定。為了在Web應用程式中保留用於XML Web服務的WSDL檔案產生,而不提供任何關於XML Web服務的可讀的資訊,那麼你可以添加一個<wsdlHelpGenerator>元素到Web應用程式的Web.config檔案中,設定href屬性為你建立的一個空白的HTML頁面。下面的程式碼範例是一個Web.config檔案的摘錄,設定服務協助頁面為MyBlank.htm檔案。

<webServices>
<wsdlHelpGenerator HREF="docs/MyBlank.asp"/>
</webServices>



相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。