天天看點

《微軟雲計算Windows Azure開發與部署權威指南》——6.7 AppFabric服務總線REST的服務開發

本節書摘來自異步社群《微軟雲計算windows azure開發與部署權威指南》一書中的第6章,第6.7節,作者: 尹成 , 郝庭毅 , 張俊強 , 孫奉剛 , 寇睿明 更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

微軟雲計算windows azure開發與部署權威指南

本節介紹如何建立一個簡單的服務總線主應用程式,使該程式公開一個基于rest的通路接口。任一台web用戶端,比如浏覽器,都可以使用http請求通路服務總線api。本示例使用的是wcf rest程式設計模型在服務總線上建構rest服務。

1.步驟一:注冊賬戶

① 在windows azure門戶建立一個服務命名空間。可參考本章6.2小節的内容。

② 在windows azure management門戶主視窗中單擊選中建立的命名空間。

③ 在左側的“properties”面闆中找到“default key”入口。

④ 在“default key”中單擊“view”,記下或複制密鑰,以在之後的操作中使用。

2.步驟二:定義一個基于rest的服務契約

① 以管理者身份運作visual studio 2010,選擇建立工程,選擇visual c#,建立一個控制台應用程式,命名為“imagelistener”,如圖6-68所示。

② 添加對system.servicemodel.dll的引用到該工程。在解決方案資料總管中,右鍵單擊“引用”,選擇“添加引用”,在彈出的對話框中選擇“.net”頁籤,找到system.servicemodel.dll,選中,單擊“确定”按鈕。

③ 用同樣的方法添加system.servicemodel.web.dll的引用。

《微軟雲計算Windows Azure開發與部署權威指南》——6.7 AppFabric服務總線REST的服務開發

④ 在program.cs中添加如下命名空間的引用。

通過system.servicemodel命名空間可以使用wcf的基本功能,服務總線使用了很多wcf的對象和屬性定義契約,是以在大多數服務總線應用程式中都用到該命名空間。system.servicemodel.channels命名空間幫助定義通道,通過通道與服務總線和客戶的web浏覽器通信。system.servicemodel.web包含了建立基于web應用程式的資料類型。

⑤ 将visual studio預設的命名空間改為microsoft.servicebus.samples。

⑥ 在命名空間裡定義一個名為“iimagecontract”的接口,在接口中聲明一個名為“getimage”的方法,作為最後要公開的接口方法。代碼如下:

這樣就允許服務總線将http get請求路由到getimage方法上,并将getimage方法的傳回值轉換成http getresponse回複。

⑦ 在“iimagecontract”接口定義的下面,聲明一個繼承了iimagecontract和iclientchannel的通道,具體代碼如下。

channel是一個wcf對象,是服務端和用戶端互相傳遞資訊的通道。之後,主機應用程式會建立一個通道,服務總線就會通過這個通道将來自浏覽器的http get請求傳遞給getimage方法。服務總線也通過這個通道得到getimage方法傳回的值,并轉換成要傳回給浏覽器的http getresponse。

⑧ 按f7鍵生成解決方案,以確定正确。最後的代碼如下:

3.步驟三:實作基于rest的wcf服務契約

① 在“iimagecontract”接口下面建立一個名為“imageservice”的類,該類實作“iimagecontract”接口。具體代碼如下:

② 向工程裡添加一個jpg格式的圖檔。右鍵單擊工程,選擇“添加”→“現有項”,在彈出的檔案選擇對話框中選擇本地的一張jpg圖檔,注意檔案類型過濾條件要選擇all files(.)以友善選擇jpg檔案。本例添加圖檔名稱為“penguins.jpg”。

③ 為確定運作時的服務能找到圖像檔案,在解決方案資料總管中右鍵單擊添加的圖檔,在屬性中設定“複制到輸出目錄”的值為“如果較新則複制”,如圖6-69所示。

《微軟雲計算Windows Azure開發與部署權威指南》——6.7 AppFabric服務總線REST的服務開發

④ 在工程中添加對system.drawing.dll、system. runtime.serialization.dll、microsoft.servicebus.dll的引用,可參考步驟二的序号②。microsoft. servicebus.dll可以在windows azure sdk目錄下找到,然後在program.cs中添加對如下命名空間的引用。

⑤ 在imageservice中添加構造方法來加載位圖,以準備将圖檔發送至用戶端浏覽器。

⑥ 在imageservice類中添加getimage()方法,傳回值為包含了傳回圖檔的http消息。

getimage方法體中使用memorystream檢索圖像和準備流。

⑦ 右鍵單擊imagelistener工程,選擇“添加”→“建立項”,在添加建立項對話框中選擇應用程式配置檔案,單擊“添加”,如圖6-70所示。

《微軟雲計算Windows Azure開發與部署權威指南》——6.7 AppFabric服務總線REST的服務開發

⑧ 打開app.config檔案,具體内容如下:

⑨ 在根節點中添加名為“system.servicemodel”的子節點,這是wcf的元素,用來定義一個或者多個服務。在這裡用來定義服務名稱和端點。

⑩ 在“system.servicemodel”中添加名為“binding”的子節點,它用來定義程式中使用的綁定,可以定義多個,但在本例中隻需要一個,具體代碼如下。

該代碼定義了一個relayclientauthenticationtype為none的webhttprelaybinding服務總線綁定,這表明使用此綁定的端點不要求用戶端提供證書。

11 在“binding”元素後面再添加“services”元素,同樣可以定義多個,但本例隻需要一個,具體代碼如下。

這段代碼配置了使用之前定義的webhttprelaybinding的一個服務。它使用預設的sharedsecretcredentials,這将在下一步中定義。

12 在“services”元素後面再添加一個“behaviors”元素,代碼如下,将“issure_name”和“issure_secret”替換為發行名字和密鑰。

sharedsecretclientcredentials行為定義了服務用來通路服務總線所使用的證書,即sharedsecret。

13 windows azure sdk 1.5版本不再将條目添加到machine.config檔案,故需要手動将用到的擴充名添加到項目的app.config檔案中,在system.servicemodel元素裡添加如下代碼。注意version的值要與讀者引用的microsoft.servicebus.dll的版本一緻。

14 按f7鍵,生成解決方案。

最終program.cs的代碼如下:

最終app.config的内容如下。

4.步驟四:将該基于rest的服務托管到服務總線

① 建立服務的基位址。在main()方法中建立一個變量用來存放服務總線工程的服務命名空間。根據此服務命名空間生成uri。

② 建立和配置該web服務的主機。使用生成的uri位址建立web服務主機。

③ 運作web服務主機。打開服務,給出提示,結束後關閉服務。最後main()中代碼如下:

④ 圖6-71所示為運作結果。圖6-72所示為最終的界面。

《微軟雲計算Windows Azure開發與部署權威指南》——6.7 AppFabric服務總線REST的服務開發

https://yqfile.alicdn.com/188d0635fe9b5cf8a6646c99b84161818f95db29.png" >

繼續閱讀