一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

WCF分布式開發(fā)步步為贏(3)WCF服務元數(shù)據(jù)交換、配置及編程開發(fā)

 

  今天我們繼續(xù)WCF分布式開發(fā)步步為贏(3)WCF服務元數(shù)據(jù)交換、配置及編程開發(fā)的學習。經(jīng)過前面兩節(jié)的學習,我們了解WCF分布式開發(fā)的相關的基本的概念和自定義宿主托管服務的完整的開發(fā)和配置過程。今天我們來詳細學習WCF服務元數(shù)據(jù)交換的相關內容。WCF服務元數(shù)據(jù)究竟是什么?為什么WCF服務要暴露元數(shù)據(jù)交換節(jié)點?這些和以前的Web Service有什么關系?WCF服務元數(shù)據(jù)交換的方式有那些?我們如何實現(xiàn)WCF服務元數(shù)據(jù)交換,本節(jié)我們會詳細講解。全文結構如下:【1】WCF服務元數(shù)據(jù)的基本概念、【2】WCF服務元數(shù)據(jù)交換方式介紹【3】WCF服務元數(shù)據(jù)交換配置實現(xiàn)過程詳解【4】WCF服務元數(shù)據(jù)交換編程實現(xiàn)過程詳解【5】總結。

  【1】WCF服務元數(shù)據(jù)的基本概念:

  WCF服務元數(shù)據(jù)究竟是什么?它的作用是什么?為什么WCF服務要暴露元數(shù)據(jù)交換節(jié)點?這些和以前的Web Service有什么關系?這些通常是我們在學習WCF服務分布式系統(tǒng)開發(fā)過程中常常困擾我們的問題。

  【1.1】WCF服務元數(shù)據(jù)是什么:

  WCF服務元數(shù)據(jù)是WCF服務的核心部分服務地址(Address)、綁定(通信協(xié)議Binding)、契約(服務、操作、數(shù)據(jù)Contract)的原始描述信息。服務所公開的元數(shù)據(jù)包括 XSD(文檔中出現(xiàn)的元素、文檔中出現(xiàn)的屬性、子元素、子元素的數(shù)量、子元素的順序、元素是否為空、元素和屬性的數(shù)據(jù)類型、元素或屬性的默認和固定值)和 WSDL 文檔(用于描述服務的方法、參數(shù)、參數(shù)個數(shù)、順序、返回值、返回值的類型等方法的相關信息)。.Disco文檔(描述服務的協(xié)議、地址、命名空間等信息)。

  這些關鍵的WCF服務元數(shù)據(jù)全部都是基于XML語言描述,支持核心的行業(yè)標準協(xié)議。XSD好處顯而易見,  基于XML,沒有專門的語法 ,XML Schema支持一系列的數(shù)據(jù)類型(int、float、Boolean、date等) ,可擴充的數(shù)據(jù)模型,支持綜合命名空間 ,支持屬性組等。而這些正式WCF分布式服務追求的跨語言、跨平臺的關鍵部分所在。

  【1.2】為什么要暴露服務元數(shù)據(jù):

  知道了WCF服務元數(shù)據(jù)的概念后,我們就能理解為什么要暴露服務的元數(shù)據(jù)。WCF服務的元數(shù)據(jù)描述服務的核心信息,客戶端需要了解這些特征以便與該服務進行通信。要想實現(xiàn)異構平臺或者系統(tǒng)之間的通信,以前的技術是使用Web Service。因為其具有自描述、可擴展、與平臺無關等優(yōu)勢。客戶端只需要根據(jù)Web Service地址,便可獲取服務的相關信息,反序列話本地的代碼,通過服務代理進行服務的調用。

  WCF服務主要特性之一就是跨平臺的服務交互。而暴露服務元數(shù)據(jù)的重要原因就是解決了異構客戶端服務交互的關鍵問題。 元數(shù)據(jù)基于XML,自描述。客戶端可以根據(jù)服務的元數(shù)據(jù)反序列換生成本地代碼,無論是c#,vb還是Java語。

  【1.3】WCF的服務和Web Service比較:

  WCF其中一個重要特性就是支持Web Service的核心協(xié)議。無論是服務應用程序還是實際項目中客戶端服務的引用的代碼都能看出很多相似之處。這里線來看看服務程序的代碼結構(IIS托管為例)。   

  兩者除了包括自己的擴展文件外還有與其對應的服務代碼文件。

  再來看看客戶端引用服務后本地的代碼結構。首先是Web Service客戶端的服務引用的本地文件:

  其次是WCF客戶端服務引用的文件結構:

  兩者都包括服務的本地代碼文件(反序列化生成的本地服務相關代碼),WSDL服務描述文件、XSD服務結構文件。WCF框架模型一定程度上參考了以前的ASP.NET Web Service,并對此進行了擴展。

【2】WCF服務元數(shù)據(jù)交換方式介紹:

  WCF服務有兩種方案可以發(fā)布自己的元數(shù)據(jù)。一種是基于HTTP-GET協(xié)議提供元數(shù)據(jù);另一種則為MEX終結點元數(shù)據(jù)交換方式,和WCF服務一樣使用一個專門的終結點,稱為MEX元數(shù)據(jù)交換終結點。

  System.ServiceModel.Description命名空間里MetadataExchangeClientMode枚舉類型里進行了定義。代碼如下:

using System;

namespace System.ServiceModel.Description
{
    
// Summary:
    
//     Specifies the exchange mode used to obtain metadata.
    public enum MetadataExchangeClientMode
    {
        
// Summary:
        
//     A WS-Transfer Get request is used.
        MetadataExchange = 0,
        
//
        
// Summary:
        
//     An HTTP GET request is used.
        HttpGet = 1,
    }
}
【3】WCF服務元數(shù)據(jù)交換配置實現(xiàn)過程詳解:

  【3.1】配置HTTP-GET元數(shù)據(jù)交換方式:

  需要配置服務的行為和基地址,客戶端可以根據(jù)基地址查看服務的元數(shù)據(jù)。代碼如下:

      <service name="WcfServiceApp.WCFService" behaviorConfiguration="WcfServiceApp.WCFServiceBehavior">
                
<host>
          
<baseAddresses>
            
<add baseAddress="http://localhost:8001/"/>
          
baseAddresses>
        
host>
      
service>
    
services>
    
<behaviors>
      
<serviceBehaviors>
        
<behavior name="WcfServiceApp.WCFServiceBehavior">
          

          
<serviceMetadata httpGetEnabled="true"/>
          

          
<serviceDebug includeExceptionDetailInFaults="false"/>
        
behavior>
      
serviceBehaviors>
    
behaviors>
【4】WCF服務元數(shù)據(jù)交換編程實現(xiàn)過程詳解:

  以上的配置文件實現(xiàn)的WCF服務的元數(shù)據(jù)交換,同樣我們也可以通過編程方式實現(xiàn)。前者配置簡單、快捷,后者相對復雜。但是編程方式允許代碼運行時控制或者設置元數(shù)據(jù)交換的信息。因而更加靈活。下面我們就來看看如何通過代碼實現(xiàn)剛才的服務原數(shù)據(jù)交換的配置。

  【4.1】WCF服務元數(shù)據(jù)交換HTTP-GET編程實現(xiàn):

  必須添加對命名空間的引用, using System.ServiceModel.Description;我們對服務元數(shù)據(jù)操作的類和接口信息定義在此命名空間里,具體的實現(xiàn)HTTP-GET的代碼如下:

 ServiceMetadataBehavior metadataBehavior;//定義服務行為變量,
                metadataBehavior = host.Description.Behaviors.Find<ServiceMetadataBehavior>();
                
//獲取宿主的行為列表
                if (metadataBehavior == null)//如果沒有服務原數(shù)據(jù)交換的行為,實例化添加服務原數(shù)據(jù)交換行為
                {
                    metadataBehavior 
= new ServiceMetadataBehavior();
                    Uri httpAddress 
= new Uri("http://localhost:8001/");
                    metadataBehavior.HttpGetUrl 
=httpAddress;
                    metadataBehavior.HttpGetEnabled 
= true;//設置HTTP方式
                    host.Description.Behaviors.Add(metadataBehavior);
                }
【5】總結:

  運行宿主程序,客戶端添加服務引用,使用不同元數(shù)據(jù)地址,我們可以查詢到不同的服務信息。結果如下:

  【5.1】http-get方式:

 

  【5.1】終結點http方式:

 

  【5.1】終結點tcp方式:

 

  【5.1】終結點ipc方式:

   

  【5.5】結論

  以上就是全部是WCF服務元數(shù)據(jù)交換相關概念、配置和編程實現(xiàn)http-get及WS-*等協(xié)議進行元數(shù)據(jù)交換的詳細內容。元數(shù)據(jù)的信息除了包括服務、數(shù)據(jù)、操作等契約的相關的信息外,還有其他的如事物、可靠性、錯誤處理等相關的信息。

  了解了這些實現(xiàn)過程之后,在實際的WCF服務項目中,我們就可以以不同的方式配置元數(shù)據(jù)交換方式。WCF元數(shù)據(jù)交換其實和Web Service原數(shù)據(jù)交換有類似之處,都是基于XML語言描述,原數(shù)據(jù)交換之所以這樣重要。

  首先,基于XML的元數(shù)據(jù)可以實現(xiàn)跨語言、跨平臺之間的服務交互,真正做到與平臺的無關性。

  其次,通過原數(shù)據(jù)反序列化生成本地代理類等信息,因為這樣就實現(xiàn)了真正的客戶端和服務端的解耦,降低了系統(tǒng)之間的耦合度。傳統(tǒng)的程序集引用方式無法降低系統(tǒng)的耦合度,這個也是我們系統(tǒng)設計追求的目標。

  以上就是WCF服務元數(shù)據(jù)交互的全部內容,下面上傳本節(jié)的實例代碼:

/Files/frank_xl/WCFServiceMEXFrankXuLei.rar。供大家參考,也歡迎留言討論~

  參考資料:MSDN

 


老徐的博客

【作者】:Frank Xu Lei

【地址】:http://www.cnblogs.com/frank_xl/archive/2009/03/25/1421862.html

NET技術WCF分布式開發(fā)步步為贏(3)WCF服務元數(shù)據(jù)交換、配置及編程開發(fā),轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 米奇7777狠狠狠狠视频影院 | 久久亚洲网站 | 国产xxxxx在线观看 | 久久精品免视看国产盗摄 | 亚洲香蕉久久 | 日韩在线一区高清在线 | 激情视频图片小说 | 9丨精品国产高清自在线看 aⅴ一区二区三区 | 国产极品久久 | 亚洲狠狠97婷婷综合久久久久 | 精彩国产熟睡乱子伦午夜片 | 久久久这里有精品 | 亚洲麻豆视频 | 激情丝袜 | 欧美一级特黄aa大片婷婷 | 永久免费观看午夜视频在线 | 日本激情一区二区三区 | 欧美成人三级网站 | 男女一区二区三区免费 | 日本a级精品一区二区三区 日本a在线看 | 国产麻豆成91 | 亚洲婷婷六月 | 成人特黄午夜性a一级毛片 成人婷婷 | 午夜免费视频观看 | 国产成人亚洲精品91专区高清 | 国产日韩欧美成人 | julia一区二区三区中文字幕 | 亚洲人体一区 | 久久国产精品-国产精品 | 国产在线视频网 | 91精品一区二区三区在线 | 毛片在线播放视频 | 四虎免费永久在线播放 | 91麻豆国产 | 国产精彩视频在线观看 | 在线播放91| 欧美日韩一区二区三区自拍 | 日本一区二区三区免费观看 | 久青草国产手机在线视频 | 国产一区二区三区在线观看免费 | 伊人网狠狠干 |