本文的出發點
通過閱讀本文,您能了解以下知識:
Address是什麼?
Address的組成?
如何在配置檔案中指定Address?
如何通過程式設計方式設定Address?
Address有什麼特殊應用?
本文适合的讀者
适合WCF初學者,可以沒有任何SOA和其他分布式開發經驗
一個要和服務端通訊的用戶端要做的第一件事情,就是搞清資料要發給誰?目的地在哪?而Address正是通過一個Uri來唯一标示一個WCF的終節點(EndPoint)的,它标示了消息發送的目的地。在WCF資料通訊中,它解決了服務在哪裡的問題。
Address在WCF中的用System.ServiceModel.EndpointAddress對象
來表示的,它的結構如下:

<col>
組成部分
作用
Uri
訓示EndPoint的位址,是必須的
Identity
能保證位址的唯一性,當Uri一緻的時候,可以用Identity來區分EndPoint,可有可無
Headers
為位址提供了一些附加資訊,用于Soap Message Filter,最後會添加到Soap消息的Header中
此外,Address還包括
IsAnonymous屬性,用于訓示終節點是否能匿名通路
。
在配置檔案中,有兩種方式可以指定Address,一種是絕對位址方式,另外是相對位址方式
,分别如下:
絕對位址
<
host
>
baseAddresses
add
baseAddress
= "http://localhost:8731/"
/>
</
endpoint
address
="http://localhost:8731/Service"
binding
="basicHttpBinding"
contract
="Wcf_Address_Config.IService1"
endpoint
相對位址
="Service1"
></
在網上有人說絕對位址是通過将
httpGetEnabled設定為true,并且設定httpGetUrl為絕對位址是在設定endPoint的說法有些不準确,因為在WCF中有兩種位址,一種是通路endPoint時候用到位址,另外一種是服務描述的位址
,服務描述在wcf中被稱作serviceMetadata,通過它能夠産生代理類,比如,我們做如下的設定:
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,具體方法請參參見下面的代碼示例:
static
void
Main(
string
[] args)
{
EndpointAddress address
=
new
EndpointAddress(
"
http://127.0.0.1:2136/Service1
);
Binding binding
BasicHttpBinding();
wcf.IService1 service
wcf.Service1Client(binding, address);
Console.WriteLine(service.GetData(
2
));
Console.Read();
}
上面的代碼就是将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)