在Windows Azure平台上部署服務

來源:互聯網
上載者:User

  公告:本部落格為微軟雲端運算中文部落格的鏡像部落格。部分文章因為部落格相容性問題,會影響閱讀體驗。如遇此情況,請訪問原部落格。

 


    簡介

之前,我們在Windows Azure平台簡介中介紹過Windows Azure的三大主要功能。那就是計算,儲存,以及管理。至今為止,通過之前的教學文章,大家已經熟知了Windows Azure的儲存功能。當然,儲存只是最基本的一個功能。要充分發揮雲端運算的威力,我們不得不學習如何“計算”。

同樣在Windows Azure平台簡介中,我們也介紹了Windows Azure的三種主要計算功能: 作為一個部署服務平台 作為一個軟體分發平台 作為一個一般的分散式運算平台

本文將引導大家達成第一種功能:在Windows Azure上部署服務。後續文章將會介紹另兩種功能。事實上,在Windows Azure入門教學系列 (一): 建立第一個WebRole程式裡,大家已經嘗試過部署一個最簡單的服務:一個ASP.NET網站。是的,ASP.NET網站也可以稱作一種服務。現在,你的ASP.NET程式不再是運行在你自己的伺服器上,而是運行在雲端了。但是,Windows Azure不僅僅支援常規網站,我們也完全可以把那些和使用者介面無關的服務(headless services)部署至雲端。例如,WCF服務,WF工作流程,等等。而也正是這些headless services,使我們的web site搖身一變成為了Web API,讓使用者可以使用任意大小的螢幕,在任意場合,使用他們喜歡的用戶端,訪問我們的服務。本文將會教導大家如何在Windows Azure上部署一個WCF服務,作為入門教學,我們將使用最簡單的SOAP Service。

如果你並不瞭解WCF,請自http://msdn.microsoft.com/en-us/netframework/aa663324.aspx開始學習。本文假設你已經瞭解了WCF的基礎知識。 前期準備

想要在Windows Azure這樣的Server Load Balancer環境中使用WCF,首先必須下載一個hotfix。這個hotfix已經預裝在雲端的伺服器上,但是如果你要在本地測試,還需要手工裝到本機。這個hotfix解決了WCF的一些在Server Load Balancer場合下可能出現的bug。 建立並觀察項目

建立一個新的Cloud Service項目。選擇添加一個WCF Service Web Role。

在這個入門教學中,我們將使用最基本的,預設產生的程式碼。以下是預設產生的OperationContracts:

             [OperationContract]

             string GetData(int value);

 

             [OperationContract]

             CompositeType GetDataUsingDataContract(CompositeType composite);

開啟web.config,請注意預設產生的配置使用的便是basicHttpBinding。可是如果使用普通的WCF Service項目模板,你將會得到wsHttpBinding。注意wsHttpBinding預設使用Windows Authentication,在Windows Azure中Windows Authentication是不支援的,所以如果你使用普通的WCF Service項目模板,請記得修改wsHttpBinding的安全配置,或者改成使用basicHttpBinding。 Server Load Balancer帶來的問題

現在,運行項目,你會看到標準的WCF資訊頁面

請注意WSDL檔案的地址並不正確,我們的服務應該是運行在81連接埠上,但是該頁面確報告WSDL檔案位於連接埠5100。假設你點擊上述連結,將會得到一個400 Bad Request錯誤。即使你強制在瀏覽器中輸入http://127.0.0.1:81/Service1.svc?wsdl,你會發現雖然的確可以看到WSDL檔案,但是產生的WSDL檔案並不正確,包含一系列諸如<soap:addresslocation="http://lanxing-pc.fareast.corp.microsoft.com:5100/Service1.svc" /> 這樣的連結。如果你嘗試在一個用戶端程式中add service reference,就會遇上錯誤了。

以上,正是WCF預設的行為在Server Load Balancer場合下會引發的問題。事實上,我們的服務的第一個執行個體(至少在本地類比環境中)確實運行在連接埠5100上,如果你的Web Role有多個執行個體,第二個執行個體很可能會運行在連接埠5101上。但是Server Load Balancer器對外暴露的連接埠永遠是你在csdef檔案中指定的連接埠(當然在本地因為80連接埠已經被IIS佔用,不得不使用81連接埠)。WCF預設並不知道Server Load Balancer器,所以它還是認為用戶端必須訪問連接埠5100。 解決Server Load Balancer帶來的問題

之前我們提到過WCF團隊已經研發了一個hotfix,用於解決Server Load Balancer帶來的問題。但是為了發揮該hotfix的功效,必須做一點配置。

首先,在web.config中找到服務的service behavior,並且添加一個名為useRequestHeadersForMetadataAddress的behavior。這個行為是通過hotfix安裝的。

        <behavior name="WCFServiceWebRole1.Service1Behavior">

          <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->

          <serviceMetadata httpGetEnabled="true"/>                             

          <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->

          <serviceDebug includeExceptionDetailInFaults="false"/>

                                 <!-- 啟用hotfix解決Server Load Balancer造成的連接埠不正確問題。 -->

                                  <useRequestHeadersForMetadataAddress>

                                        <defaultPorts>

                                               <add scheme="http" port="80" />

                                               <add scheme="https" port="443" />

                                        </defaultPorts>

                                 </useRequestHeadersForMetadataAddress>

                           </behavior>

 

再有,在Server Load Balancer場合,用戶端所請求的地址往往和服務所部署的真正地址是不同的。因此我們推薦大家將AddressFilterMode設定成Any,從而不再檢查地址匹配性。

       [ServiceBehavior(AddressFilterMode = AddressFilterMode.Any)]

       public class Service1 : IService1

現在,再次運行程式,你會看到連接埠81已經被成功識別出來。 將Web Role部署至雲端

請參考http://blogs.msdn.com/azchina/archive/2010/02/18/webrole.aspx將Web Role部署至雲端,這個過程是完全一致的,不管你使用ASP.NET,使用WCF,或者使用其它技術。本文不再重複。

現在,你可以嘗試在本地構建一個用戶端程式訪問剛發布的服務,不過本文就不再詳細介紹如何訪問服務了。再下一篇文章中,我們將會從雲端分發一個軟體,並且讓那個軟體和我們的服務互動,協同工作。 總結

你可以在Windows Azure上部署任意服務,而為了充分發揮雲端運算的威力,我們往往不僅僅需要使用諸如ASP.NET之類的技術製作的web site,更需要使用諸如WCF之類的技術製作的Web API,從而真正地通過雲,將所有種類的用戶端串連起來。

在Windows Azure中使用WCF和在一般場合下使用WCF非常類似,但是我們必須注意Server Load Balancer可能帶來的問題,並做好應對方案。

 

相關文章

聯繫我們

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

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

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.