閱讀目錄
一:契約與中繼資料
二:服務描述與中繼資料
一:契約與中繼資料
. 用戶端與服務端之間共用的應該是Contract契約而不是代碼,就是前面我們講的文章“一步一個腳印學習WCF之WCF概要—WCF服務的建立與調用HelloWorld執行個體,通過編碼方式(四)”一文中的IHelloWorldService,它與其他分布式技術最顯著的區別是耦合性是基於契約的,不是基於代碼的耦合,由於在契約中不包含具體的邏輯,這樣的話為我們構建松耦合的分布式應用程式提供了良好的基礎
. Web Service Description Language(WSDL)
Web Service的描述語言WSDL裡麵包含了下面的5個內容,這5個方面的內容是我們在進行資料通訊的時候必須需要的內容
-互操作契約
就是我們前面介紹的ABC裡面的C
-描述服務和相應的Endpoint端點
就是我們前面介紹的ABC裡面的A
-Bingding綁定
就是我們前面介紹的ABC裡面的B
-訊息和類型的定義
-策略
在進行訊息傳遞的時候,要應用哪些具體的策略,都是由WSDL來進行描述的
. 用於產生用戶端的代理和配置
在前面的那個Demo,我們的契約以及服務相應的代碼都是用手動的方式來完成的,實際上像用戶端的代理和一些配置具體的代碼可以通過相應的嚮導來產生的
二:服務描述與中繼資料
由契約和中繼資料還是用於產生用戶端的代理和響相應的配置的,前面我們講的文章“一步一個腳印學習WCF之WCF概要—WCF服務的建立與調用HelloWorld執行個體,通過編碼方式(四)”一文中服務相應的代碼都是通過編碼實現的,事實上像用戶端的代理和配置裡面具體的代碼我們實際上可以通過嚮導來產生
1:產生服務描述
看圖一,在ServiceHost裡面運行著服務以及相應的端點,ServiceHost裡面又多了一個東西是ServiceDescription服務描述,也就是Service具體的描述,由這個Service具體的描述它把Serivce和Endpoint以及相關的ABC資訊在這裡面進行了相應的記錄,外面是有一個Config檔案,當ServiceHost啟動的時候來載入這個Config檔案,根據Config檔案裡面具體的內容來產生相應的描述資訊
圖一
2:產生WSDL
看圖二,由ServiceDescription服務描述來產生WSDL的檔案,通過svcutil.exe這個工具來產生相應的在用戶端所使用的這個Proxyl代理以及相應Channel通道的配置以及相應的代碼,同樣在用戶端我們可以通過Config設定檔的方式來影響Proxyl代理以及Channel通道的產生
圖二
3:中繼資料的交換
在完成了圖二階段,我們可以通過svcutil.exe這個工具來實現從Service服務這一端到Client客戶這一端中繼資料的交換,整個的服務描述與中繼資料的互動就是圖三的這個結構,從這個結構圖我們可以看到,Client用戶端它在擷取Service服務具體的資訊時候,實際上它不會直接與Service或者Endpoint來進行接觸的,Client用戶端它在擷取Service或者Endpoint這些具體的資訊的時候,它是通過ServiceDescription服務描述來獲得的並且通過中繼資料互動的這種方式來得到相應的資訊,然後來構建用戶端自己的Proxyl代理,那麼通過這種方式我們也會發現如果現在我們的Service或者Endpoint內部的一些邏輯發生變化的話,只要它不影響ServiceDescription服務描述,就不會對用戶端的Proxyl代理產生影響,同樣也就不會對用戶端來產生影響,這樣的話通過這種方式實現了Client端和ServiceHost端的松耦合的關係
圖三