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

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

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

本文介紹如何使用WCF中繼來構建混合應用。

WCF中繼

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

基于TCP的SOAP訪問

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

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

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

View Code

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

通過WCF中繼公開本地WCF服務

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

PM> Install-Package Window

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

View

文件配置方式

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

View

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

View

代碼方式

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

View Code

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

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

客戶端也需要安裝服務總線NuGet包,相應的中繼服務相關擴展也會自動添加在Config文件中。

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

View

代碼方式也是跟服務端類似,添加相應的NetTcpBinding,終結點地址和TransportClientEndpointBehavior。

View Code

基于HTTP的REST訪問

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

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

跟前面TCP方式的步驟一樣,唯一的區(qū)別是WcfRelayType設置為Http,服務名稱也做相應的命名,比如httpdata。這樣創(chuàng)建出來的WCF中繼服務地址是

通過WCF中繼公開本地WCF服務

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

  1. Host使用WebServiceHost

  2. 綁定使用WebHttpRelayBinding

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

文件配置方式

View

代碼方式

View Code

客戶端

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

利用服務總線包的內置方法

View Code

自己生成

View Code

示例代碼中的resourceUri就是前面創(chuàng)建的中繼服務地址:

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

View Code

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

使用IIS托管服務

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

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

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

設置web應用對應的ApplicationPool啟動模式為AlwaysRunning

設置web應用Preload Enabled為True

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

View

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

1.《wcf中如何實現(xiàn)多服務》援引自互聯(lián)網(wǎng),旨在傳遞更多網(wǎng)絡信息知識,僅代表作者本人觀點,與本網(wǎng)站無關,侵刪請聯(lián)系頁腳下方聯(lián)系方式。

2.《wcf中如何實現(xiàn)多服務》僅供讀者參考,本網(wǎng)站未對該內容進行證實,對其原創(chuàng)性、真實性、完整性、及時性不作任何保證。

3.文章轉載時請保留本站內容來源地址,http://f99ss.com/keji/3223169.html