使用VPN或者ER服務(wù)建立云服務(wù)和本地服務(wù)網(wǎng)絡(luò)通道來搭建混合應(yīng)用的方式,需要網(wǎng)絡(luò)設(shè)備的配合和比較復雜的網(wǎng)絡(luò)配置,所以不是特別的方便。如果是不希望對本地網(wǎng)絡(luò)環(huán)境做修改,而只是服務(wù)層面的混合,那么可以使用一個更方便的服務(wù) – Azure中繼服務(wù)?;贏zure中繼服務(wù)訪問本地服務(wù),客戶端不需要與本地服務(wù)建立直接連接,也不需要了解服務(wù)所在的位置,并且本地服務(wù)無需在防火墻上打開任何入站端口。

Azure中繼服務(wù)支持傳統(tǒng)的單向消息傳送、請求/響應(yīng)消息傳送和對等消息傳送。它還支持 Internet 范圍的事件分發(fā),以實現(xiàn)發(fā)布-訂閱方案和雙向套接字通信,從而提高點到點通信效率。在中繼消息傳送模式中,本地服務(wù)會通過出站端口連接至中繼服務(wù),并為綁定至特定會合地址的通信創(chuàng)建一個雙向套接字。然后,客戶端可以通過將消息發(fā)送到抵達會合地址的中繼服務(wù)來與本地服務(wù)通信。

目前Azure提供兩種中繼服務(wù),WCF(Windows Communication Foundation)中繼和混合連接。其中WCF中繼是傳統(tǒng)的服務(wù),適合于基于WCF的本地服務(wù)。(關(guān)于WCF請參閱 WCF 官方文檔)。而混合連接使用開放標準Web套接字,可實現(xiàn)多平臺方案,適用性更廣。

本文介紹如何使用WCF中繼來構(gòu)建混合應(yīng)用。

WCF中繼

WCF中繼允許你向公有云公開位于企業(yè)網(wǎng)絡(luò)內(nèi)的WCF服務(wù),而無需打開防火墻連接,也無需對企業(yè)網(wǎng)絡(luò)基礎(chǔ)結(jié)構(gòu)進行徹底的更改。而且它還允許你安全的控制誰可以訪問這些服務(wù)。另外對你原來的WCF項目所需要做的改動也是很小的。

移動開發(fā)培訓,Android培訓,安卓培訓,手機開發(fā)培訓,手機維修培訓,手機軟件培訓

基于TCP的SOAP訪問

適用于支持SOAP協(xié)議的客戶端。

創(chuàng)建WCF中繼服務(wù)

可以登陸Azure中國門戶網(wǎng)站,按照界面提示一步步創(chuàng)建。也可以通過PowerShell命令,如下,其中創(chuàng)建wcf中繼時,WcfRelayType設(shè)置為NetTcp。RequiresTransportSecurity和RequiresClientAuthorization默認都是true,這里顯示指定只是處于演示作用。

移動開發(fā)培訓,Android培訓,安卓培訓,手機開發(fā)培訓,手機維修培訓,手機軟件培訓 View Code

創(chuàng)建出來的WCF中繼服務(wù)地址是sb://relaydemons.servicebus.chinacloudapi.cn/tcpdata

通過WCF中繼公開本地WCF服務(wù)

給本地服務(wù)安裝服務(wù)總線NuGet包,默認安裝最新版本。

PM> Install-Package WindowsAzure.ServiceBus

安裝完成后,在config文件里面會自動添加一些擴展的行為和綁定聲明,比如:

移動開發(fā)培訓,Android培訓,安卓培訓,手機開發(fā)培訓,手機維修培訓,手機軟件培訓 View

文件配置方式

修改config文件,添加如下endpointBehavior,其中key需要有監(jiān)聽權(quán)限

移動開發(fā)培訓,Android培訓,安卓培訓,手機開發(fā)培訓,手機維修培訓,手機軟件培訓 View

前面創(chuàng)建的WCF中繼服務(wù)類型時NetTcp,所以這里添加綁定為netTcpRelayBinding的終結(jié)點,并指向前面創(chuàng)建的WCF中繼服務(wù)地址

移動開發(fā)培訓,Android培訓,安卓培訓,手機開發(fā)培訓,手機維修培訓,手機軟件培訓 View

代碼方式

注意,這里中繼服務(wù)地址不能用ServiceBusEnvironment.CreateServiceUri("sb", "namespace", "tcpdata"))來生成,因為它生成的地址不是中國Azure的。

移動開發(fā)培訓,Android培訓,安卓培訓,手機開發(fā)培訓,手機維修培訓,手機軟件培訓 View Code

因為WCF支持對同一個服務(wù)使用多個網(wǎng)絡(luò)終結(jié)點,所以可以在添加中繼服務(wù)終結(jié)點以便外部訪問的同時保留現(xiàn)有的內(nèi)部終結(jié)點。

創(chuàng)建客戶端進行SOAP訪問

客戶端也需要安裝服務(wù)總線NuGet包,相應(yīng)的中繼服務(wù)相關(guān)擴展也會自動添加在Config文件中。

文件配置方式,跟服務(wù)端一樣,也需要添加同樣的endpointBehavior,只是key換成需要發(fā)送權(quán)限。另外添加跟服務(wù)端完全一致的終結(jié)點配置。

移動開發(fā)培訓,Android培訓,安卓培訓,手機開發(fā)培訓,手機維修培訓,手機軟件培訓 View

 代碼方式也是跟服務(wù)端類似,添加相應(yīng)的NetTcpBinding,終結(jié)點地址和TransportClientEndpointBehavior。

移動開發(fā)培訓,Android培訓,安卓培訓,手機開發(fā)培訓,手機維修培訓,手機軟件培訓 View Code

基于HTTP的REST訪問

WCF服務(wù)本身支持服務(wù)以REST的形式公開出來,那么同樣的,客戶端也希望能用普通的HTTP來訪問。對于這種形式,WCF中繼服務(wù)也是支持的。

創(chuàng)建WCF中繼服務(wù)

跟前面TCP方式的步驟一樣,唯一的區(qū)別是WcfRelayType設(shè)置為Http,服務(wù)名稱也做相應(yīng)的命名,比如httpdata。這樣創(chuàng)建出來的WCF中繼服務(wù)地址是https://relaydemons.servicebus.chinacloudapi.cn/httpdata

通過WCF中繼公開本地WCF服務(wù)

與TCP方式對比,有兩個不一樣的地方

  1. Host使用WebServiceHost

  2. 綁定使用WebHttpRelayBinding

通過HTTP方式公開,默認情況下是可以允許任何客戶端訪問的,這樣不安全,所以需要在WebHttpRelayBinding里配置RelayClientAuthenticationType為RelayAccessToken,這樣客戶端就必須提供正確令牌才能訪問。

文件配置方式

移動開發(fā)培訓,Android培訓,安卓培訓,手機開發(fā)培訓,手機維修培訓,手機軟件培訓 View

代碼方式

移動開發(fā)培訓,Android培訓,安卓培訓,手機開發(fā)培訓,手機維修培訓,手機軟件培訓 View Code

客戶端

因為前面服務(wù)端配置為安全訪問方式,所以客戶端需要提供正確令牌。那么如何生成令牌呢?有兩種方式,一是利用服務(wù)總線包里的內(nèi)置方法,二是自己生成,前者增加了對服務(wù)總線包的依賴性,但簡單方便,后者需要對服務(wù)總線令牌的要求有一定的了解。以下提供兩種方式的代碼示例。

利用服務(wù)總線包的內(nèi)置方法

移動開發(fā)培訓,Android培訓,安卓培訓,手機開發(fā)培訓,手機維修培訓,手機軟件培訓 View Code

自己生成

移動開發(fā)培訓,Android培訓,安卓培訓,手機開發(fā)培訓,手機維修培訓,手機軟件培訓 View Code

示例代碼中的resourceUri就是前面創(chuàng)建的中繼服務(wù)地址:https://relaydemons.servicebus.chinacloudapi.cn/httpdata

有了令牌后,就可以使用Http客戶端來調(diào)用了,比如使用HttpClient。

移動開發(fā)培訓,Android培訓,安卓培訓,手機開發(fā)培訓,手機維修培訓,手機軟件培訓 View Code

提示:直接把服務(wù)總線的Key提供在客戶端是不安全的,可以另外提供一個專門生成token的服務(wù),這樣客戶端就可以需要的時候就從那個服務(wù)獲取token,而不是直接拿到Key自己生成。

使用IIS托管服務(wù)

當本地服務(wù)是用IIS的方式來托管時,有一個特別需要注意的地方,IIS托管的服務(wù)只有在接受到請求后才會啟動,所以如果一開始直接調(diào)用通過中繼公開出來的服務(wù)是會失敗的,因為本地托管在IIS里的服務(wù)還沒啟動,也就還沒與中繼服務(wù)建立鏈接,因此需要一些額外的配置來預熱。那么該如何配置來預熱呢?

可以按照以下步驟通過IIS的Application Initialization功能來做到:

確保Application Initialization功能已經(jīng)安裝。(角色 => Web Server (IIS) => Web Server => Application Development)

移動開發(fā)培訓,Android培訓,安卓培訓,手機開發(fā)培訓,手機維修培訓,手機軟件培訓

設(shè)置web應(yīng)用對應(yīng)的ApplicationPool啟動模式為AlwaysRunning

移動開發(fā)培訓,Android培訓,安卓培訓,手機開發(fā)培訓,手機維修培訓,手機軟件培訓

設(shè)置web應(yīng)用Preload Enabled為True

移動開發(fā)培訓,Android培訓,安卓培訓,手機開發(fā)培訓,手機維修培訓,手機軟件培訓

添加如下初始頁配置到web應(yīng)用的web.config中,一般初始頁設(shè)置為訪問wcf svc頁面即可。

移動開發(fā)培訓,Android培訓,安卓培訓,手機開發(fā)培訓,手機維修培訓,手機軟件培訓 View

 這樣的話,就相當于web應(yīng)用部署好之后會馬上訪問配置好的初始頁來進行預熱,從而與Service bus relay建立好鏈接,客戶端就可以訪問了。如果IIS重啟也會執(zhí)行預熱操作以保證服務(wù)的運行。

http://www.cnblogs.com/hula100/p/7122084.html