天天看點

WCF之Address詳解

本文的出發點

通過閱讀本文,您能了解以下知識:

Address是什麼?

Address的組成?

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

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

Address有什麼特殊應用?

本文适合的讀者

适合WCF初學者,可以沒有任何SOA和其他分布式開發經驗

一個要和服務端通訊的用戶端要做的第一件事情,就是搞清資料要發給誰?目的地在哪?而Address正是通過一個Uri來唯一标示一個WCF的終節點(EndPoint)的,它标示了消息發送的目的地。在WCF資料通訊中,它解決了服務在哪裡的問題。

Address在WCF中的用System.ServiceModel.EndpointAddress對象

來表示的,它的結構如下:

WCF之Address詳解

<col>

組成部分

作用

Uri

訓示EndPoint的位址,是必須的

Identity

能保證位址的唯一性,當Uri一緻的時候,可以用Identity來區分EndPoint,可有可無

Headers

為位址提供了一些附加資訊,用于Soap Message Filter,最後會添加到Soap消息的Header中

此外,Address還包括

IsAnonymous屬性,用于訓示終節點是否能匿名通路

在配置檔案中,有兩種方式可以指定Address,一種是絕對位址方式,另外是相對位址方式

,分别如下:

絕對位址

WCF之Address詳解

&lt;

host

&gt;

WCF之Address詳解

baseAddresses

WCF之Address詳解

add 

baseAddress 

= "http://localhost:8731/"

/&gt;

WCF之Address詳解

&lt;/

WCF之Address詳解
WCF之Address詳解

endpoint 

address 

="http://localhost:8731/Service"

 binding

="basicHttpBinding"

 contract

="Wcf_Address_Config.IService1"

endpoint

相對位址

WCF之Address詳解
WCF之Address詳解
WCF之Address詳解
WCF之Address詳解
WCF之Address詳解
WCF之Address詳解

="Service1"

&gt;&lt;/

在網上有人說絕對位址是通過将

httpGetEnabled設定為true,并且設定httpGetUrl為絕對位址是在設定endPoint的說法有些不準确,因為在WCF中有兩種位址,一種是通路endPoint時候用到位址,另外一種是服務描述的位址

,服務描述在wcf中被稱作serviceMetadata,通過它能夠産生代理類,比如,我們做如下的設定:

WCF之Address詳解

serviceMetadata 

httpGetEnabled

="True"

 httpGetUrl

隻代表在http://localhost:8731/Service/?wsdl

上能找到服務描述,可以通過http://localhost:8731/Service/?wsdl

生成代理類,而不是将endPoint的位址設定為了http://localhost:8731/Service

這點一定要注意,不要受有些說法的誤導。

可以提供一個或多個預設的基本位址(Base

Address),這樣在endPoint設定中隻需提供相對位址。多個基本位址之間不能沖突,不能在同一個端口進行監聽

。相對位址通過端點綁定類型與基本位址進行匹

配,進而在運作時獲得完整位址。如果我們将某個端點設定中的位址設為空值(或省略 address),則表示直接使用某個相比對的基本位址。

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

Address?

除了能在配置中設定Address外

,還可以通過程式設計的方式來設定Address,具體方法請參參見下面的代碼示例:

WCF之Address詳解

static

void

 Main(

string

[] args)

WCF之Address詳解
WCF之Address詳解
WCF之Address詳解

{

WCF之Address詳解

            EndpointAddress address 

=

new

 EndpointAddress(

"

http://127.0.0.1:2136/Service1

);           

WCF之Address詳解

            Binding binding 

 BasicHttpBinding();

WCF之Address詳解

            wcf.IService1 service 

 wcf.Service1Client(binding, address);

WCF之Address詳解

            Console.WriteLine(service.GetData(

2

));

WCF之Address詳解

            Console.Read();

WCF之Address詳解

        }

上面的代碼就是将endPoint的位址設定為了http://127.0.0.1:2136/Service1

在wcf中,能夠将服務同時釋出到幾個位址上面,隻要這些位址采用的都是一種通路方式

。這種一份程式,多個釋出位址的做法,在以往的技術中是沒有的。

示例項目:

通過配置檔案設定Address:/Files/jillzhang/Wcf_Address_Config.rar

通過代碼方式設定Address:/Files/jillzhang/Wcf_Address.rar

本文參考資料

javascript:void(0)