本文適合的讀者
適合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
一種是絕對地址方式
另外是相對地址方式
分別如下
絕對地址
<host>
<baseAddresses>
<add baseAddress = //localhost:
/
/>
</baseAddresses>
</host>
<endpoint address =//localhost:
/Service
binding=
basicHttpBinding
contract=
Wcf_Address_Config
IService
> </endpoint>
相對地址
<host>
<baseAddresses>
<add baseAddress = //localhost:
/
/>
</baseAddresses>
</host>
<endpoint address =
Service
binding=
basicHttpBinding
contract=
Wcf_Address_Config
IService
></endpoint>
在網上有人說絕對地址是通過將httpGetEnabled設置為true
並且設置httpGetUrl為絕對地址是在設置endPoint的說法有些不准確
因為在WCF中有兩種地址
一種是訪問endPoint時候用到地址
另外一種是服務描述的地址
服務描述在wcf中被稱作serviceMetadata
通過它能夠產生代理類
比如
我們做如下的設置
<serviceMetadata httpGetEnabled=
True
httpGetUrl=//localhost:
/Service
/>
只代表//localhost:
/Service/?wsdl上能找到服務描述
可以通//localhost:
/Service/?wsdl生成代理類
而不是將endPoint的地址設置為//localhost:
/Service
這點一定要注意
不要受有些說法的誤導
如何通過編程方式設置Address?
除了能在配置中設置Address外
還可以通過編程的方式來設置Address
具體方法請參參見下面的代碼示例
static void Main(string[] args)
{
EndpointAddress address = new EndpointAddress(
);
Binding binding = new BasicHttpBinding();
wcf
IService
service = new wcf
Service
Client(binding
address);
Console
WriteLine(service
GetData(
));
Console
Read();
}
上面的代碼就是將endPoint的地址設置為了
Address有什麼特殊應用?
在wcf中
能夠將服務同時發布到幾個地址上面
只要這些地址采用的都是一種訪問方式
這種一份程序
多個發布地址的做法
在以往的技術中是沒有的
From:http://tw.wingwit.com/Article/program/net/201311/11681.html