熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

WCF從理論到實踐四:路在何方

2022-06-13   來源: .NET編程 
  本文適合的讀者
  
  適合WCF初學者可以沒有任何SOA和其他分布式開發經驗
  
  
  
  Address是什麼?
  
  一個要和服務端通訊的客戶端要做的第一件事情就是搞清數據要發給誰?目的地在哪?而Address正是通過一個Uri來唯一標示一個WCF的終節點(EndPoint)的它標示了消息發送的目的地在WCF 數據通訊中它解決了服務在哪裡的問題
  
  
  
  Address的組成?
  
  Address在WCF中的用SystemServiceModelEndpointAddress對象來表示的它的結構如下
  
  組成部分
   作用
  
  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_ConfigIService> </endpoint>
  
  
  
  
  相對地址
  
   <host>
   <baseAddresses>
   <add baseAddress = //localhost:/ />
   </baseAddresses>
   </host>
   <endpoint address =Service binding=basicHttpBinding contract=Wcf_Address_ConfigIService></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();
   wcfIService service = new wcfServiceClient(binding address);
   ConsoleWriteLine(serviceGetData());
   ConsoleRead();
   }
  上面的代碼就是將endPoint的地址設置為了
  
  
  
  Address有什麼特殊應用?
  
  在wcf中能夠將服務同時發布到幾個地址上面只要這些地址采用的都是一種訪問方式這種一份程序多個發布地址的做法在以往的技術中是沒有的

From:http://tw.wingwit.com/Article/program/net/201311/11681.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.