前面介紹了通過(guò)WCF中繼構(gòu)建混合應(yīng)用的方式,由于對(duì)WCF的依賴,使得其使用有一定的局限性,基本上只適用于本地服務(wù)是WCF的.NET應(yīng)用。而混合連接則彌補(bǔ)了這一塊的缺陷,除了支持原有WCF中繼的功能之外,還提供了多平臺(tái)多語(yǔ)言的支持,這只要是因?yàn)榛旌线B接是基于開(kāi)放標(biāo)準(zhǔn)協(xié)議web sockets實(shí)現(xiàn)的。

以下是與WCF中繼的一個(gè)對(duì)比表: 


WCF中繼混合連接
建立本地和云之間的安全連接
無(wú)需修改防火墻添加入站端口
無(wú)需對(duì)網(wǎng)絡(luò)配置做重大修改
基于開(kāi)放標(biāo)準(zhǔn)協(xié)議Χ(只支持WCF)
跨平臺(tái)支持Χ(只支持Windows)
多語(yǔ)言支持Χ(只支持.NET)

 

下面主要分三種情況來(lái)介紹混合連接的使用:

一. 基于混合連接SDK

二. 基于Azure Web App混合連接工具

三. 基于PortBridge示例程序

 


 創(chuàng)建混合連接

可以登陸Azure中國(guó)門戶網(wǎng)站,按照界面提示一步步創(chuàng)建。也可以通過(guò)PowerShell命令,如下。

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營(yíng)銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營(yíng)銷培訓(xùn) View Code

創(chuàng)建出來(lái)混合連接字符串就是sb://relaydemons.servicebus.chinacloudapi.cn/hcdemo

 


 

基于混合連接SDK

目前微軟官方提供了兩個(gè)SDK,一個(gè)是.NET語(yǔ)言版本,另一個(gè)是Node.JS版本。兩個(gè)SDK也都開(kāi)源在Github上:azure-relay-netazure-relay-node。

本地服務(wù)(監(jiān)聽(tīng)者)

首先本地服務(wù)端作為監(jiān)聽(tīng)者,需要要使用具有監(jiān)聽(tīng)權(quán)限的連接字符串,創(chuàng)建一個(gè)出站的WebSocket連接,也就是注冊(cè)到Azure中繼服務(wù)上。如果本地有多個(gè)監(jiān)聽(tīng)者,那么進(jìn)入的訪問(wèn)請(qǐng)求會(huì)隨機(jī)地發(fā)送。一個(gè)混合連接最多支持25個(gè)監(jiān)聽(tīng)者。

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營(yíng)銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營(yíng)銷培訓(xùn) View Code

外部服務(wù)(發(fā)送者)

發(fā)送者提供具有發(fā)送權(quán)限的連接字符串(不是必須如果建立混合連接時(shí)沒(méi)有要求客戶端認(rèn)證,不過(guò)從安全角度考慮,推薦要求認(rèn)證),與混合連接服務(wù)建立WebSocket連接,最終會(huì)與一個(gè)監(jiān)聽(tīng)者建立起連接,從而進(jìn)行溝通。

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營(yíng)銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營(yíng)銷培訓(xùn) View Code

當(dāng)然,因?yàn)榇罱ǖ腤ebSocket是雙向通道,所以本地服務(wù)端也可以發(fā)送消息到外部服務(wù)端的。

連接字符串

前面提到需要用到不同權(quán)限的連接字符串,總共有三種權(quán)限管理,監(jiān)聽(tīng)和發(fā)送,可以根據(jù)需要?jiǎng)?chuàng)建不同權(quán)限搭配的安全訪問(wèn)策略,然后在它的具體界面里會(huì)自動(dòng)生成相應(yīng)的連接字符串,直接復(fù)制使用即可,如下圖。

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營(yíng)銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營(yíng)銷培訓(xùn)

如果本地服務(wù)不能或者不希望被修改成調(diào)用SDK,比如云端Web App調(diào)用本地的Web Api或者SQL數(shù)據(jù)庫(kù),那該如何使用混合連接呢?Azure Web App已經(jīng)整合里混合連接,可以很方便的配置,而不需要對(duì)本地服務(wù)做任何修改。

完整代碼示例可查看我的Github。

 


 

基于Azure Web App混合連接工具

目前Azure中國(guó)還沒(méi)有支持混合連接的整合,不過(guò)已經(jīng)在路上了,應(yīng)該會(huì)很快就可上線。以下用Azure全球來(lái)演示,最終Azure中國(guó)也會(huì)是同樣的體驗(yàn)。

配置混合連接端節(jié)點(diǎn)

登陸azure門戶網(wǎng)站,找到你的web app,在設(shè)置下面點(diǎn)擊網(wǎng)絡(luò),在展開(kāi)的頁(yè)面中點(diǎn)擊“配置你的混合連接端節(jié)點(diǎn)”,打開(kāi)頁(yè)面如下:

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營(yíng)銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營(yíng)銷培訓(xùn)

點(diǎn)擊“下載連接管理工具”下載,后面會(huì)用到。

點(diǎn)擊“添加混合連接”,在打開(kāi)的頁(yè)面里面點(diǎn)擊添加,如下圖。填入相應(yīng)信息,其中名稱可以自定義,而端節(jié)點(diǎn)主機(jī)必須是運(yùn)行你本地服務(wù)的機(jī)器名稱,端節(jié)點(diǎn)端口也是本地服務(wù)所在端口。命名空間選擇前面已經(jīng)創(chuàng)建好的,也可以這里創(chuàng)建新的。

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營(yíng)銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營(yíng)銷培訓(xùn)

創(chuàng)建完成后,把前面下載的連接管理工具安裝在運(yùn)行本地服務(wù)的機(jī)器上。然后打開(kāi)混合連接管理工具,點(diǎn)擊“Configure another Hybrid Connection”,這個(gè)時(shí)候會(huì)彈出登陸框,輸入你的azure訂閱賬戶登陸后,會(huì)顯示當(dāng)前訂閱中已有的混合連接,如下圖。

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營(yíng)銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營(yíng)銷培訓(xùn)

選擇配置了正確端節(jié)點(diǎn)的混合連接,然后點(diǎn)擊“Save”保存。這個(gè)混合連接就會(huì)將本地與云端web app建立起連接,狀態(tài)顯示為”Connected”。

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營(yíng)銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營(yíng)銷培訓(xùn)

這樣,在web app里面就可以通過(guò)”端節(jié)點(diǎn)名稱:端口“的方式來(lái)訪問(wèn)本地的服務(wù)了。比如我這里演示的,我在本地運(yùn)行了一個(gè)web api服務(wù)(api/values)在16782端口,返回字符串”value from on-premises <本地機(jī)器名稱>”,然后通過(guò)混合連接,云端web app就可以很簡(jiǎn)單的訪問(wèn)本地服務(wù)了,代碼如下:

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營(yíng)銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營(yíng)銷培訓(xùn) View Code

結(jié)果:

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營(yíng)銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營(yíng)銷培訓(xùn)

對(duì)于其他本地服務(wù),比如SQL服務(wù),也可以用同樣的方式連接。

 


 

基于PortBridge示例程序

如果外部服務(wù)不是用Azure Web App,又該如何使用混合連接呢?可以通過(guò)混合連接來(lái)實(shí)現(xiàn)端口轉(zhuǎn)發(fā),從而建立連接通道。微軟官方示例PortBridge正是演示了這種功能。接下來(lái),我們用它來(lái)演示在云端虛擬機(jī)中的web應(yīng)用調(diào)用本地web api。

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營(yíng)銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營(yíng)銷培訓(xùn)

創(chuàng)建以本地服務(wù)所運(yùn)行的機(jī)器為名稱的混合連接(演示名稱mc-allenl-01),如何創(chuàng)建請(qǐng)參照文章最開(kāi)始的PowerShell命令。并分別創(chuàng)建發(fā)送和監(jiān)聽(tīng)權(quán)限的共享訪問(wèn)策略。

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營(yíng)銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營(yíng)銷培訓(xùn)

將PortBridge下載并編譯,修改PortBridgeServerAgent.exe.config文件中portBridge相關(guān)配置,其中targetHost配置成本地服務(wù)所運(yùn)行的機(jī)器名稱,端口則為本地服務(wù)所在端口,本示例配置如下。然后將整個(gè)文件夾復(fù)制到本地服務(wù)所運(yùn)行的機(jī)器上,并雙擊PortBridgeServerAgent.exe運(yùn)行。

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營(yíng)銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營(yíng)銷培訓(xùn) View Code

修改PortBridgeClientAgent.exe.config文件中portBridgeAgent的相關(guān)配置,其中targetHost設(shè)置成本地服務(wù)所運(yùn)行的機(jī)器名稱,localTcpPort設(shè)為你期望使用訪問(wèn)的端口,remoteTcpPort則為本地服務(wù)所運(yùn)行的端口,本示例配置如下。將整個(gè)文件夾復(fù)制到Azure虛擬機(jī)中,并雙擊PortBridgeClientAgent.exe運(yùn)行。

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營(yíng)銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營(yíng)銷培訓(xùn) View Code

在Azure虛擬機(jī)中訪問(wèn)http://localhost:81/api/values,沒(méi)有運(yùn)行PortBridge之前是會(huì)失敗的,但開(kāi)啟PortBridge,也就是通過(guò)混合連接建立通道之后,就會(huì)訪問(wèn)成功,如下所示:

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營(yíng)銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營(yíng)銷培訓(xùn)

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