WCF從理論到實踐 4 路在何方

2022-02-01 13:26:43 字數 2803 閱讀 6549

本文的出發點

address是什麼?

address的組成?

如何在配置檔案中指定address?

如何通過程式設計方式設定address?

address有什麼特殊應用?

本文適合的讀者

適合wcf初學者,可以沒有任何soa和其他分布式開發經驗

address是什麼?

乙個要和服務端通訊的客戶端要做的第一件事情,就是搞清資料要發給誰?目的地在哪?而address正是通過乙個uri來唯一標示乙個wcf的終節點(endpoint)的,它標示了訊息傳送的目的地。在wcf 資料通訊中,它解決了服務在**的問題。

address的組成?

address在wcf中的用system.servicemodel.endpointaddress物件來表示的,它的結構如下:

組成部分

作用

uri指示endpoint的位址,是必須的

identity

能保證位址的唯一性,當uri一致的時候,可以用identity來區分endpoint,可有可無

headers

為位址提供了一些附加資訊,用於soap message filter,最後會新增到soap訊息的header中

此外,address還包括isanonymous屬性,用於指示終節點是否能匿名訪問。

如何在配置檔案中指定address?

在配置檔案中,有兩種方式可以指定address,一種是絕對位址方式,另外是相對位址方式,分別如下:

絕對位址

相對位址

在網上有人說絕對位址是通過將httpgetenabled設定為true,並且設定httpgeturl為絕對位址是在設定endpoint的說法有些不準確,因為在wcf中有兩種位址,一種是訪問endpoint時候用到位址,另外一種是服務描述的位址,服務描述在wcf中被稱作servicemetadata,通過它能夠產生**類,比如,我們做如下的設定:

只代表在http://localhost:8731/service/?wsdl上能找到服務描述,可以通過http://localhost:8731/service/?wsdl生成**類,而不是將endpoint的位址設定為了http://localhost:8731/service,這點一定要注意,不要受有些說法的誤導。

如何通過程式設計方式設定address?

除了能在配置中設定address外 ,還可以通過程式設計的方式來設定address,具體方法請參參見下面的**示例:

static

void

main(

string

args)

上面的**就是將endpoint的位址設定為了

address有什麼特殊應用?

在wcf中,能夠將服務同時發布到幾個位址上面,只要這些位址採用的都是一種訪問方式。這種乙份程式,多個發布位址的做法,在以往的技術中是沒有的。

示例專案:

通過配置檔案設定address:/files/jillzhang/wcf_address_config.rar

通過**方式設定address:/files/jillzhang/wcf_address.rar

本文參考資料

WCF從理論到實踐 4 路在何方

本文的出發點 address是什麼?address的組成?如何在配置檔案中指定address?如何通過程式設計方式設定address?address有什麼特殊應用?本文適合的讀者 適合wcf初學者,可以沒有任何soa和其他分布式開發經驗 address是什麼?乙個要和服務端通訊的客戶端要做的第一件事...

WCF從理論到實踐 1 揭開神秘面紗

引子 wcf是 windows communication foundation 的縮寫,原來的代號為 indigo 它是ms為soa service oriented architecture 而設計的一套完整的技術框架。利用它能夠開發出分布式 distributed 應用程式,而且開發難度相比以...

WCF從理論到實踐 3 八號當鋪之黑色契約

本文的出發點 通過閱讀本文,能解決以下的問題 什麼是契約?契約有幾種?他們都有什麼用途 如何定義契約?契約是獨立於平台的麼?契約和以往哪種技術比較相像,又有什麼不同?本文適合的讀者 wcf的初學者,可以沒有任何soa或者其他分布式技術經驗 什麼是契約?任何乙個分布式應用程式,它之所以能夠互相傳遞訊息...