成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

WCF WS-Discovery應用技巧分享

開發 開發工具
WCF WS-Discovery的目的就是為了定位服務定義Discovery協議,來為客戶端的搜索提供一定的幫助,其分為兩種模式,分別為:ad hoc和managed模式。

WCF是一款使用托管代碼建立的應用程序統一框架。它在實際應用中可以幫助開發人員輕松的實現一個安全性高,可依賴性的開發解決方案,輕松幫助用戶解決各種問題。在這里我們會為大家詳細介紹一下WCF WS-Discovery的相關應用技巧。#t#

在WS-*標準和規范中,WCF WS-Discovery是在2008年才加入了OASIS標準。WS-Discovery在標準被定義為Web Service Dynamic Discovery,其目的是為定位服務定義Discovery協議,主要應用在為客戶端動態搜索一個或多個目標服務。OASIS為WS- Discovery提供了兩種操作模式:ad hoc和managed模式。

ad hoc模式根據類型在托管目標服務的范圍內查找目標服務。客戶端會以多播的形式發送一個Probe(探測)消息,如果服務匹配該信息,則以單播方式直接將響應發送到客戶端。為了能夠根據名稱定位目標服務,客戶端會以相同的多播組發送一個Resolve(解析)消息,同樣的,匹配該消息的服務會直接以單播方式響應客戶端。

如果Endpoint的數量擴大了,且超出了ad hoc網絡的范圍之外,而且在網絡中可以使用Discovery Proxy(發現代理),則應該采用Managed操作模式,以禁止多播的行為。在Managed模式下,目標服務只需要以單播的形式發布一個 announcement(通告)消息到Discovery Proxy,同時,客戶端也會以單播形式發送Probe和Resolve消息到Discovery Proxy。這種模式并非直接采用單播方式,而是會實時對Discovery Proxy進行監聽,然后根據情況切換操作模式,從而降低多播給網絡傳輸帶來的影響。當Discovery Proxy檢測到在ad hoc網絡中有多播方式發送的Probe和Resolve消息時,它就會發布announcement通知自身。客戶端一旦監聽到Discovery Proxy上的announcement消息,就切換為Managed模式,直接以單播方式將probe和resolve消息發送給Discovery Proxy。如果Discovery Proxy沒有響應,客戶端又會切換為ad hoc操作模式。Managed模式的消息交換流程如下所示:

 

WCF 4.0實現了OASIS的WCF WS-Discovery標準,相關的類定義在System.ServiceModel.Discovery命名空間中。這是一個單獨的程序集,所以需要添加對它的引用。

 

WCF Discoverty支持ad hoc和Managed模式,其中實現Managed模式需要實現Discovery Proxy。

在WCF 4.0中,新增了ServiceDiscoveryBehavior行為類,可以控制服務終結點的可發現能力。它能夠讓服務的所有終結點都能被發現,相反,如果使用EndpointDiscoveryBehavior則只能使特定的終結點能夠被發現。除了需要添加發現行為,我們還需要添加發現終結點,用來指定監聽以及發送discovery消息。WCF中標準的發現終結點類是UdpDiscoveryEndpoint,它基于UDP的多播綁定,是WCF 預先配置好的發現終結點。該終結點繼承自DiscoveryEndpoint類。在托管服務的時候,我們可以向ServiceHost中添加 ServiceDiscoveryBehavior和EndpointDiscoveryBehavior,如下所示:

  1. class CalculatorServiceHost {  
  2. public static void Main() {  
  3. Uri baseAddress = new Uri("http://localhost:8000/" + 
    Guid.NewGuid().ToString());   
  4. using (ServiceHost serviceHost = new ServiceHost(typeof
    (CalculatorService), baseAddress)) {  
  5. serviceHost.AddServiceEndpoint(typeof(ICalculatorService), 
    new WSHttpBinding(), String.Empty);  
  6. // Make the service discoverable over UDP multicast   
  7. serviceHost.Description.Behaviors.Add(new ServiceDiscoveryBehavior());   
  8. serviceHost.AddServiceEndpoint(new UdpDiscoveryEndpoint());  
  9. serviceHost.Open();  
  10. Console.WriteLine("Calculator Service started at {0}", baseAddress);  
  11. Console.WriteLine();  
  12. Console.WriteLine("Press <ENTER> to terminate the service.");  
  13. Console.WriteLine();  
  14. Console.ReadLine();  
  15. }  
  16. }  

 

在對服務宿主進行如下設置之后,客戶端就可以通過發送Probe和Resolve消息來發現服務。WCF將這些邏輯封裝在了DiscoveryClient 類中。它接受一個發現終結點對象,然后通過調用它的Find()方法(該方法接受一個FindCriteria實例,用來指定搜索標準,在下面的代碼片斷中指定搜索標準為按照目標服務的類型),返回FindResponse對象。該對象會包含一個 Collection<EndpointDiscoveryMetadata>類型的屬性Endpoints:

  1. // Create DiscoveryClient  
  2. DiscoveryClient discoveryClient = new DiscoveryClient
    (new UdpDiscoveryEndpoint());  
  3. Console.WriteLine("Finding ICalculatorService endpoints...");  
  4. Console.WriteLine();  
  5. // Find ICalculatorService endpoints   
  6. FindResponse findResponse = discoveryClient.Find
    (new FindCriteria(typeof(ICalculatorService)));  
  7. Console.WriteLine("Found {0} ICalculatorService endpoint(s).", 
    findResponse.Endpoints.Count);  
  8. Console.WriteLine();  
  9. if (findResponse.Endpoints.Count > 0) {  
  10. return findResponse.Endpoints[0].Address;  
  11. } else {  
  12. return null;  

 

通過WCF WS-Discovery,我們不需要知道WCF服務的終結點,只要存在目標服務,我們就能夠動態查找到該服務。即使服務的Url發生改變,我們也不需要修改任何代碼和配置文件,客戶端仍然能夠正常發現目標服務。

責任編輯:曹凱 來源: 博客園
相關推薦

2010-03-01 13:06:49

WCF繼承

2010-02-25 15:25:19

WCF通道

2010-02-22 17:21:02

WCF消息交換

2010-02-25 10:52:29

WCF響應服務

2010-02-23 13:03:34

WCF序列化

2010-02-26 10:46:12

WCF行為擴展

2010-03-01 09:48:23

WCF會話服務

2010-03-01 15:40:04

WCF實例停用

2010-03-02 10:50:57

WCF元數據交換

2010-02-25 18:04:02

WCF IIS宿主

2010-03-01 17:52:03

WCF選擇綁定

2010-02-24 17:07:26

WCF序列化引擎

2010-02-22 17:58:06

WCF異步上傳

2010-02-22 11:25:50

WCF DateSet

2010-02-24 11:22:04

WCF方法重載

2009-12-22 19:00:08

WCF回調

2010-02-26 14:12:27

WCF元數據

2010-02-23 16:46:47

WCF并發能力

2010-02-22 16:19:25

WCF自托管

2010-02-22 16:26:47

WCF傳輸數據
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品一区二区三区91 | 国产精品一区在线观看 | 亚洲成人99 | 欧美精品久久久久 | 一区二区三区高清 | 欧美亚洲综合久久 | 国产精品日韩在线观看 | 精品在线一区 | 国产成人精品一区二区三区 | 亚洲欧洲成人av每日更新 | 国产精品毛片一区二区在线看 | 国产一区影院 | 中文字幕成人av | 国产综合在线视频 | 精品国产乱码久久久久久牛牛 | 91成人精品 | 国内精品伊人久久久久网站 | 香蕉一区 | 精品视频一区二区三区在线观看 | 日韩精品久久久久 | 欧美成年网站 | 欧美亚洲国语精品一区二区 | 成人欧美一区二区三区黑人孕妇 | 国产精品久久久久久吹潮 | 国产精品日产欧美久久久久 | 9191成人精品久久 | 精品在线免费观看视频 | 日韩欧美一级 | 免费一级欧美在线观看视频 | 国产精品福利视频 | 中文字幕av一区二区三区 | 亚洲综合精品 | 黄色免费观看网站 | 精品一二三区视频 | 久久av一区二区三区 | 91在线免费视频 | 最新国产在线 | 国产精品福利视频 | 在线视频国产一区 | 北条麻妃一区二区三区在线观看 | 国产精品免费一区二区 |