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

作者: jillzhang  來源: 博客園  發布時間: 2008-11-28 12:01  閱讀: 3109 次  推薦: 0   原文鏈接   [收藏]  

系列文章導航:

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

WCF從理論到實踐(2):決戰紫禁之巔

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

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

WCF從理論到實踐(5):Binding細解

WCF從理論到實踐(6):WCF架構

WCF從理論到實踐(7):消息交換模式

WCF從理論到實踐(8):事件廣播

WCF從理論到實踐(9):實例模式和對象生命周期

WCF從理論到實踐(10):異常處理

WCF從理論到實踐(11)-異步

WCF從理論到實踐(12):事務

WCF從理論到實踐(13):事務投票

WCF從理論到實踐(14):WCF解決方案模板

WCF從理論到實踐(15):響應變化

WCF從理論到實踐(16):操作重載(帶視頻+ppt+源碼)

WCF從理論到實踐(17):OO大背離(帶視頻+ppt+源碼)

 

本文的出發點

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

  1. Address是什么?
  2. Address的組成?
  3. 如何在配置文件中指定Address?
  4. 如何通過編程方式設置Address?
  5. 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,一種是絕對地址方式,另外是相對地址方式,分別如下:

絕對地址

 <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,具體方法請參參見下面的代碼示例:
 

 static void Main(string[] args)
        
{
            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

0
0
 
標簽:wcf
 
 

文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()