天天看點

《微軟雲計算Windows Azure開發與部署權威指南》——6.6 AppFabric服務總線服務Remoting的應用程式開發

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

本節将帶領大家通過微軟釋出的windows azure training kit裡的示例學習appfabric服務總線的服務remoting的應用程式開發。使用的訓練包與6.3節一樣,是watk june2012.exe。示例項目目錄為watklabsservicebusserviceremoting,進行該項目開發所需要的軟體環境為(針對windows 7作業系統)。

① iis 7(開通asp.net、wcf http activation)。

② microsoft .net framework 4.0。

③ microsoft visual studio 2010。

④ windows azure tools for visual studio 1.7。

⑤ windows azure libraries for .net 1.7。

首先介紹該示例工程的項目背景。有一個虛拟的銀行,受管理規則的規定,要分為兩部分:投資和零售。it必須重構已存在客戶的關系管理系統(以下簡稱crm)讓兩個部分即使不在同一個企業網絡内也都能通路到客戶資料。已經建立的crm web服務大量使用了wcf技術,并且部署在本地運作。

最開始,it部門決定将crm web服務繼續部署在投資實體的本地,并将一部分功能通過托管在windows azure服務總線上的另一個服務來公開,讓零售實體可以通路到。這樣便将服務和用戶端應用程式需要做的改變最小化了。

在第二階段,投資實體外包了其應用程式服務部署。這樣一來便将與零售實體共享的服務的部署位置更改了,并使用了工作者角色部署。但是由于服務總線命名空間允許服務繼續以新的位置釋出,于是用戶端并不需要做任何改變,甚至對服務部署位置的改變毫無察覺。

本節将通過一個簡單的執行個體程式來介紹服務總線應用程式的開發,該執行個體程式由服務端和用戶端組成,服務端将服務托管到服務總線上,用戶端則調用托管在服務總線上的服務。

本節的執行個體就是對該情形做簡單的模拟。執行個體的解決方案包括兩個由投資實體部署的兩個服務,一個是crm資料服務,為投資實體提供應用程式服務;另一個是fi public服務,使用第一個服務将crm的部分功能暴露給零售實體通路。執行個體的解決方案如圖6-45所示。

安裝步驟與6.3節一緻,此處不再贅述。

1.步驟一:運作本地的服務

① 以管理者身份運作visual studio 2010,打開sourceex1-servicebusremotingbegin目錄下的serviceremoting.sln檔案。

該解決方案包含的工程如表6-3所示,目錄結構如圖6-46所示。

《微軟雲計算Windows Azure開發與部署權威指南》——6.6 AppFabric服務總線服務Remoting的應用程式開發

https://yqfile.alicdn.com/b2f647cbd31ea17b0306b19b2835de451ca97cfb.png" >

② 配置解決方案啟動用戶端、crm資料服務、fi public服務。在solution explore中右鍵單擊serviceremoting解決方案,選擇set startup projects。在“solution 'serviceremoting' property pages”對話框中單擊“multiple startup projects”單選按鈕,并将fictionalinvestment.crm.data、fictionalinvestment.public.services和fictionalretail.crm.client 3個工程對應的action設為start。調整3個工程的順序,確定與圖6-47一緻,單擊“ok”完成更改。

《微軟雲計算Windows Azure開發與部署權威指南》——6.6 AppFabric服務總線服務Remoting的應用程式開發
《微軟雲計算Windows Azure開發與部署權威指南》——6.6 AppFabric服務總線服務Remoting的應用程式開發

③ 按f5鍵,建構解決方案并啟動服務和用戶端應用程式。

④ 注意每個服務都會顯示器監聽位址,crm資料服務和fi public服務目前使用net.tcp并監聽的是環回測試位址。

⑤ 切換到fictional retail crm client應用程式。該窗體程式給出客戶清單和目前在兩個實體中辦理的業務。

⑥ 在窗體程式中選擇某些客戶左側的選擇框,單擊“move to fictional retail bank”,把一個或幾個投資實體的客戶移動到零售。通過觀察crm資料服務和fi public服務的控制台資訊可以知道該操作是否成功,如圖6-48所示。

《微軟雲計算Windows Azure開發與部署權威指南》——6.6 AppFabric服務總線服務Remoting的應用程式開發

⑦ 在兩個控制台程式中按“enter”鍵終止服務,然後退出用戶端應用程式。

2.步驟二:申請資料服務命名空間

該部分在6.2節中介紹過,讀者可參考前面内容,此處不再贅述。

3.步驟三:配置通路控制服務用于身份認證

① 進入服務總線門戶,單擊左側面闆的“service bus,access,control&caching”連結,選擇services項目下的service bus項目,如圖6-49所示。

② 選擇命名空間,單擊上方的“access control service”按鈕,如圖6-50所示。

《微軟雲計算Windows Azure開發與部署權威指南》——6.6 AppFabric服務總線服務Remoting的應用程式開發

③ 進入通路控制服務門戶後,選擇左側面闆中的“service identities”,如圖6-51所示。

《微軟雲計算Windows Azure開發與部署權威指南》——6.6 AppFabric服務總線服務Remoting的應用程式開發

④ 單擊“add”連結,添加一個新的identity,如圖6-52所示。

⑤ 在add service identity頁面中,在service identity settings下的name字段輸入“fictionalinvestment”,在credential settings下選擇“symmetric key”,單擊“generate”按鈕生成該證書的對稱密鑰,記錄下該密鑰,在接下來的步驟中将用到。最後将expiration date改成“”,然後單擊“save”按鈕,如圖6-53所示。

《微軟雲計算Windows Azure開發與部署權威指南》——6.6 AppFabric服務總線服務Remoting的應用程式開發

⑥ 現在,單擊“add”連結,為“fictionalinvestment”身份添加一個新的證書,如圖6-54所示。

⑦ 在add credential頁面中,單擊“password”作為證書類型。然後在password字段填入上一步得到的對稱密鑰。最後把expiration date改為“”,單擊“save”,如圖6-55所示。

⑧ 在edit service identity頁面中,單擊“save”按鈕儲存目前所做的所有更改,如圖6-56所示。

《微軟雲計算Windows Azure開發與部署權威指南》——6.6 AppFabric服務總線服務Remoting的應用程式開發

https://yqfile.alicdn.com/7e451d00feed4d5fd5bf8cfe0cac5996bcd05f43.png" >

《微軟雲計算Windows Azure開發與部署權威指南》——6.6 AppFabric服務總線服務Remoting的應用程式開發

https://yqfile.alicdn.com/5b8a71910783ee39d87d748a48353a6de45195bc.png" >

⑨ 重複操作⑤~⑧,再建立一個名為“fictionalretail”的新身份。

10 接下來需要建立一些規則,這些規則将發行人的身份映射到一些聲明上,服務總線通過這些聲明來确定該發行者可以做哪些操作。單擊左側的“rule groups”連接配接,如圖6-57所示。首先建立“fictionalinvestment”身份的“send”規則。

《微軟雲計算Windows Azure開發與部署權威指南》——6.6 AppFabric服務總線服務Remoting的應用程式開發

https://yqfile.alicdn.com/66fc4173f241789ad499134545debf5de3d49f4b.png" >

11 在rule groups頁面中,單擊“rule groups”下的“default rule group for servicebus”進行編輯,如圖6-58所示。

《微軟雲計算Windows Azure開發與部署權威指南》——6.6 AppFabric服務總線服務Remoting的應用程式開發

12 在edit rule group頁面中,單擊“add”添加新規則,如圖6-59所示。

《微軟雲計算Windows Azure開發與部署權威指南》——6.6 AppFabric服務總線服務Remoting的應用程式開發

13 在add claim rule頁面中,在if下選“access control service”單選框作為input claim issuer。在“input claim type”下選擇“select type”,使用預設值。在“input claim value”下選擇“enter value”,并輸入“fictionalinvestment”。在“then”下選擇“enter type”作為output claim type,并輸入“net.windows.servicebus.action”。選擇enter value作為output claim value并輸入“listen”,然後單擊“save”按鈕,如圖6-60所示。

14 接下來為“fictionalinvestment”身份添加一個“send”規則。在edit rule group頁面,單擊“add”添加一個新的規則。在add claim rule頁面,在“if”下選擇“access controls service”作為input claim issuer,在“input claim type”下選擇“select type”并使用預設值。在“input claim value”下選擇“enter value”并輸入“fictionalinvestment”。在“then”下選擇“enter type”作為output claim type并輸入“net.windows.servicebus.action”。選擇“enter value”作為output claim value,并輸入“send”。然後單擊“save”按鈕,如圖6-61所示。

《微軟雲計算Windows Azure開發與部署權威指南》——6.6 AppFabric服務總線服務Remoting的應用程式開發

https://yqfile.alicdn.com/c8de82a0b5310a31131f0da22a3ce61294622bfb.png" >

《微軟雲計算Windows Azure開發與部署權威指南》——6.6 AppFabric服務總線服務Remoting的應用程式開發

https://yqfile.alicdn.com/938412d5d2f4ec4727043f4c2300c9469837aa1d.png" >

15 最後,為“fictionalretail”發行者添加“send”規則。在edit rule group頁面,單擊“add”添加一個新的規則。在add claim rule頁面,在“if”下選擇“access controls service”作為input claim issuer,在“input claim type”下選擇“select type”并使用預設值。在“input claim value”下選擇“enter value”并輸入“fictionalretail”。在“then”下選擇“enter type”作為output claim type并輸入“net.windows.servicebus.action”。選擇“enter value”作為output claim value,并輸入“send”。然後單擊“save”按鈕,如圖6-62所示。

16 在edit rule group頁面中,單擊“save”儲存全部更改,如圖6-63所示。

《微軟雲計算Windows Azure開發與部署權威指南》——6.6 AppFabric服務總線服務Remoting的應用程式開發

圖6-62 為“fictionalretail”發行者添加“send”規則

《微軟雲計算Windows Azure開發與部署權威指南》——6.6 AppFabric服務總線服務Remoting的應用程式開發

https://yqfile.alicdn.com/7f6804d253dadd33de351c0f88b310885e010348.png" >

4.步驟四:配置服務監聽windows azure服務總線

fi public服務注冊在服務總線上,通過特定的、可發現的uri位址暴露出服務,使無論位于什麼地方的人都可以通路,即使有防火牆阻隔。windows azure服務總線架構如圖6-64所示。

《微軟雲計算Windows Azure開發與部署權威指南》——6.6 AppFabric服務總線服務Remoting的應用程式開發

https://yqfile.alicdn.com/de217b51d750dd7c80c150f33f58c3bf08535a89.png" >

在服務總線上公布fi public服務非常容易。隻需要為服務總線添加一個引用,把服務使用的nettcpbinding綁定改為nettcprelaybinding,然後将端點位址改為在雲端的新位址。

① 以管理者身份運作visual studio 2010,打開sourceex1-servicebusremotingbegin下的begin.sln檔案。

② 在solution explorer中右鍵單擊fictional investment.public.services工程,選擇“add reference”。在.net标簽頁中,選擇“microsoft.servicebus”,單擊“ok”按鈕。

③ 打開fictionalinvestment.publicservices下的app.config檔案,找到system.servicemodel節點下的services節點中名為“fictionalinvestment.publicservices.crmpublicservice”的endpoint節點。

④ 更新address屬性值為“sb://[your-namespace].servicebus.windows.net/crmpublicservice”,其中,[your-namespace].為項目定義的服務總線命名空間。

⑤ 将binding屬性的值由nettcpbinding改為nettcprelaybinding。

⑥ 最後,為這個endpoint節點添加一個behaviorconfiguration屬性,并将值設為servicebus credentialbehavior。下一步中會定義該行為。更改後的endpoint節點如圖6-65所示。

《微軟雲計算Windows Azure開發與部署權威指南》——6.6 AppFabric服務總線服務Remoting的應用程式開發

⑦ 在system.servicemodel中,添加上一步中添加的行為配置。該行為為服務總線提供用來驗證服務釋出者的證書。添加下面的代碼段,将issuersecret屬性的值設為建立“fictionalinvestment”發行者時記下的current key。

⑧ 将下面代碼插入system.servicemodel區域。

⑨ 為完成将服務釋出到服務總線上需要做的更改,還要配置服務的連接配接模式。打開fictionalinvestment.publicservices工程下的program.cs檔案,将下面的代碼插入main函數的開始處。

5.步驟五:配置用戶端應用程式以連接配接windows azure服務總線上的服務

① 在用戶端應用程式中添加對microsoft.servicebus的引用。在solution explorer中右鍵單擊fictionalretail.crm.client工程,選擇“add reference”。在.net标簽頁中,選擇“microsoft.servicebus”,單擊“ok”按鈕。

② 打開fictionalretail.crm.client工程中的app.config檔案,定位到system.servicemodel下的endpoint節點。

③ 更新address屬性值為“sb://[your-namespace].servicebus.windows.net/crmpublicservice”,其中,[your-namespace].為為項目定義的服務總線命名空間。

④ 将binding屬性的值由nettcpbinding改為nettcprelaybinding。

⑤ 最後,為這個endpoint節點添加一個behaviorconfiguration屬性,并将值設為servicebus credentialbehavior。下一步中會定義該行為。更改後的endpoint節點如圖6-66所示。

《微軟雲計算Windows Azure開發與部署權威指南》——6.6 AppFabric服務總線服務Remoting的應用程式開發

⑥ 在system.servicemodel中,添加上一步中添加的行為的配置。該行為為服務總線提供用來驗證用戶端應用程式的證書。添加下面的代碼段,将issuersecret屬性的值設為建立“fictionalinvestment”發行者時記下的current key。

⑧ 設定用戶端應用程式的連接配接模式。右鍵單擊fictionalretail.crm.client工程下的main.cs檔案,選擇view code指令,在main類的構造方法開始處插入下面的代碼。

6.驗證結果

現在使用服務總線測試程式驗證結果。

配置解決方案運作crm資料服務和fi public服務。在solution explorer中右鍵單擊serviceremoting解決方案,選擇“set startup projects”。在solution’serviceremoting’property pages對話框中選擇“multiple startup projects”選項,将fictional.investment.crm.data和fictional.investment. public.services工程的action設為start,并且二者順序與此相同,其他工程都設為none。

按f5鍵建構并運作應用程式。

等待兩個服務啟動并分别顯示狀态資訊。注意fi public服務正在監聽的uri位址的協定是“sb”,uri中包含命名空間。

在solution explorer中,右鍵單擊fictionalretail.crm.client,選擇“debug”→“start new instance”,啟動用戶端應用程式。

用戶端應用程式将其從連結到的服務總線上釋出的服務檢索到的客戶資料放在同一個清單中。

從清單中選擇一個或幾個客戶,單擊“move to fictional retail bank”運作結果如圖6-67所示。

① 可以看到用戶端應用程式正常工作,與服務在本地監聽時一樣。這表明用戶端不在投資實體網絡中也能夠通過服務總線連接配接到該服務。

② 在兩個控制台程式中,按“enter”鍵終止程式,然後退出用戶端應用程式。

《微軟雲計算Windows Azure開發與部署權威指南》——6.6 AppFabric服務總線服務Remoting的應用程式開發

繼續閱讀