WCF从理论到实践(4):路在何方
本文的出發點
通過閱讀本文,您能了解以下知識:
?
本文適合的讀者
適合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?=?"http://localhost:8731/"?/>
??????????</baseAddresses>
???</host>
???<endpoint?address?="http://localhost:8731/Service"?binding="basicHttpBinding"?contract="Wcf_Address_Config.IService1">?</endpoint>
相對地址
?<host>??????????<baseAddresses>
????????????<add?baseAddress?=?"http://localhost:8731/"?/>
??????????</baseAddresses>
??</host>
??<endpoint?address?="Service1"?binding="basicHttpBinding"?contract="Wcf_Address_Config.IService1"></endpoint>
在網上有人說絕對地址是通過將httpGetEnabled設置為true,并且設置httpGetUrl為絕對地址是在設置endPoint的說法有些不準確,因為在WCF中有兩種地址,一種是訪問endPoint時候用到地址,另外一種是服務描述的地址,服務描述在wcf中被稱作serviceMetadata,通過它能夠產生代理類,比如,我們做如下的設置:
?<serviceMetadata?httpGetEnabled="True"?httpGetUrl="http://localhost:8731/Service"/>
只代表在http://localhost:8731/Service/?wsdl上能找到服務描述,可以通過http://localhost:8731/Service/?wsdl生成代理類,而不是將endPoint的地址設置為了http://localhost:8731/Service,這點一定要注意,不要受有些說法的誤導。
?
如何通過編程方式設置Address?
除了能在配置中設置Address外 ,還可以通過編程的方式來設置Address,具體方法請參參見下面的代碼示例:
????????{
????????????EndpointAddress?address?=?new?EndpointAddress("http://127.0.0.1:2136/Service1");???????????
????????????Binding?binding?=?new?BasicHttpBinding();
????????????wcf.IService1?service?=?new?wcf.Service1Client(binding,?address);
????????????Console.WriteLine(service.GetData(2));
????????????Console.Read();
????????}
上面的代碼就是將endPoint的地址設置為了http://127.0.0.1:2136/Service1
?
Address有什么特殊應用?
在wcf中,能夠將服務同時發布到幾個地址上面,只要這些地址采用的都是一種訪問方式。這種一份程序,多個發布地址的做法,在以往的技術中是沒有的。
?
示例項目:
通過配置文件設置Address:/Files/jillzhang/Wcf_Address_Config.rar
通過代碼方式設置Address:/Files/jillzhang/Wcf_Address.rar
本文參考資料
http://www.cnblogs.com/artech/archive/2007/02/28/659331.html
http://www.cnblogs.com/anders-x-hu/archive/2007/05/29/763971.html
http://www.cnblogs.com/huangjizhou/archive/2007/12/03/981592.html
http://www.cnblogs.com/wayfarer/archive/2007/09/26/906075.html
轉載于:https://www.cnblogs.com/jillzhang/archive/2008/01/30/1059169.html
總結
以上是生活随笔為你收集整理的WCF从理论到实践(4):路在何方的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中文分词入门之字标注法4
- 下一篇: ADMM算法框架(未完待续 持续更新)