<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      WCF分布式開發步步為贏(1):WCF分布式框架基礎概念

      眾所周知,系統間的低耦合一直是大型企業應用系統集成追尋的目標,SOA面向服務架構的出現為我們的如何利用現有企業系統資源進行企業ERP系統設計和實現提供了重要的參考原則。SOA如此炙手可熱,各大廠商都推出了自己的中間件產品,比如Oracle Fusion和 SAP NetWeaver,IBM、BEA等企業也推出了自己基于SOA的解決方案。基于J2EE平臺的SOA架構設計中的一個重要概念就是EJB企業服務總線,作用是實現各個系統的數據交互。而.NET平臺上,WCF就是微軟為各個系統的數據交互提供通訊基礎框架。由于論文課題的原因,我對產生了SOA(Service-oriented architecture,面向服務架構)有了接觸,并且產生了濃厚的興趣。故此對.NET平臺上基于SOA的企業應用系統集成和實現技術進行潛心學習,總結心得和體會,整理出布式開發的系列文章,與大家分享。   

           下面介紹一下《WCF分布式開發步步為贏》系列文章的結構。首先會是WCF分布式開發基礎概念的介紹,其次會設計各個知識點詳細的介紹和應用,中間會穿插與以前技術的對比分析,涉及服務契約、數據契約、操作契約、事物、安全、消息隊列等重要概念。同樣作為老徐一貫的風格,我會盡量做到文章的調理清晰、系統詳細、通俗易懂!也會放出標注的詳細代碼供大家參考學習。    本節文章的結構是:1.WCF基礎概念介紹2.WCF新的特性3.WCF框架模型4.實現代碼分析5.總結。

      【1】WCF基礎概念介紹

           要學習WCF,首先我們要清楚WCF的基本概念,那么什么是WCF呢?

           WCF全稱Windows Communication Foundation,是Microsoft為構建面向服務的應用提供的分布式通信編程框架,是.NET Framework 3.5的重要組成部分。使用該框架,開發人員可以構建跨平臺、安全、可靠和支持事務處理的企業級互聯應用解決方案。
        根據微軟官方的解釋,WCF(之前的版本名為“Indigo”)是使用托管代碼建立和運行面向服務(Service Oriented)應用程序的統一框架。它使得開發者能夠建立一個跨平臺的安全、可信賴、事務性的解決方案,且能與已有系統兼容協作。WCF是微軟分布式應用程序開發的集大成者,它整合了.Net平臺下所有的和分布式系統有關的技術,如Enterprise Sevices(COM+).Net Remoting、Web Service(ASMX)、WSE3.0和MSMQ消息隊列。以通信(Communiation)范圍而論,它可以跨進程、跨機器、跨子網、企業網乃至于 Internet;以宿主程序而論,可以以ASP.NET,EXE,WPF,Windows Forms,NT Service,COM+作為宿主(Host)。WCF可以支持的協議包括TCP,HTTP,跨進程以及自定義,安全模式則包括SAML, Kerberos,X509,用戶/密碼,自定義等多種標準與模式。也就是說,在WCF框架下,開發基于SOA的分布式系統變得容易了,微軟將所有與此相關的技術要素都包含在內,掌握了WCF,就相當于掌握了叩開SOA大門的鑰匙。(參考MSDN)

          這里SOA概念我們要明確一下,SOA(Service-oriented architecture,面向服務架構)是一種架構模式和設計原則。在<Programming WCF Services >By Juval Lowy 一書中解釋為SOA(Service-oriented applicatoin)面向服務的應用程序,兩者應該不沖突,后者應該是采用SOA面向服務架構設計和實現的應用程序(Service-oriented applicatoin)。

         WCF的強大之處就是因為整合了.Net平臺下所有的和分布式系統有關的Enterprise Sevices(COM+).Net Remoting、Web Service(ASMX)、WSE3.0和MSMQ消息隊列等技術,我在之前的WCF分布式開發必備知識(4)WSE3.0構建Web服務安全(4)系列文章中都給出了詳細的介紹,這里就不在詳述,有興趣的朋友可以自己查閱。以后具體介紹WCF相關知識點的時候需要的地方我會在進行講解。

      【2】WCF新的特性

         Indigo 有三項突出的特性:與多種現有 Microsoft 技術的統一性,對跨供應商互操作性的支持,以及顯式的面向服務特性。

       【2.1】 Microsoft 分布式計算技術的統一性

         Microsoft以前的分布式計算技術特性和應用領域不同。要構建基本的可互操作的 Web 服務,最佳選擇是 ASP.NET Web 服務(ASMX)。要連接兩個基于 .NET Framework 的應用程序,選擇 .NET Remoting。如果應用程序需要分布式事務和其他更高級的服務,其創建者一般會使用企業服務Enterprise Sevices,即COM+ 的繼任者。要構建Web 服務安全,使用WS-Addressing 和 WS-Security規范,開發人員可以構建采用 WSE3.0的應用程序。而要創建基于消息的排隊式應用程序,基于 Windows 的開發人員則應使用 Microsoft 消息隊列 (MSMQ)。 各個技術的具體特性和WCF對比如下表:

       

       

      ASMX

      .NET Remoting

      企業服務

      WSE

      MSMQ

      Indigo

      Web 服務

      X

             

      X

      .NET - .NET 通信

       

      X

           

      X

      分布式事務等。

         

      X

         

      X

      WS-* 規范支持

           

      X

       

      X

      隊列消息傳輸

             

      X

      X

       

           WCF支持了以前分布式技術的所有的特性,因而對于建立分數是應用更加的靈活和全面。

      【2.2】與非 Microsoft 應用程序的互操作性

           由于 Indigo 的基本通信機制是 SOAP,因此 Indigo 應用程序可與大量運行于各種上下文環境的其他軟件進行通信。基于 Indigo 構建的應用程序可與下列所有程序進行交互:

      1)運行于同一 Windows 計算機上不同進程中的 Indigo 應用程序。

      2)運行于另一 Windows 計算機上的 Indigo 應用程序。

      3)基于其他技術構建的應用程序,如基于 Java 2 企業版 (J2EE) 構建的、支持標準 Web 服務的應用程序服務器。

      4)Indigo 應用程序還可以與基于 Indigo 以前的 .NET Web 服務(ASMX)構建的應用程序進行互操作。

       

          這樣通過標準的SOAP消息WCF可以與其他應用程序進行交互,很好地支持了跨平臺跨操作系統的的目標。當然WCF中支持安全、事物、MTOM特性,這些都以前WSE中的主要概念,我們發現WCF中也進行了擴展和支持。利于技術的向前兼容。 

      【2.3】對面向服務開發的顯式支持

           面向服務是一個廣泛的領域,它包含面向服務應用程序和更廣泛的面向服務體系結構 (SOA) 的概念。在設計此項技術的過程中始終遵守四項基本原則:

           1.共享架構,而不是類:與舊的分布式對象技術不同,服務僅通過精心定義的 XML 接口與其客戶端進行交互。跨越服務邊界傳遞完整的類、方法及全部之類的行為被禁止。

           2.服務具有自主性:服務及其客戶端同意它們之間的接口,但相互獨立。它們可以采用不同的語言編寫,可以使用不同的運行時環境(如 CLR 和 Java 虛擬機),可以運行在不同操作系統上,還可以存在其他方面的不同。

           3.邊界是顯式的:分布式對象技術 [如分布式 COM (DCOM)] 的目標之一是使遠程對象盡可能看上去像本地對象一樣。雖然這種方法通過提供一種通用編程模型在某些方面簡化了開發,但也同時隱藏了本地對象與遠程對象之間不可避免的區別。服務通過使服務與其客戶端之間的交互更明顯而避免了這一問題。隱藏分布式特性并非目的。

           4.采用基于策略的兼容性:決定在系統之間使用哪些選項應取決于基于 WS-Policy 的機制。

            WS-Policy 在WSE3.0里我們應該比較常見,通過策略配置來支持和實現Web服務的安全。這里很多技術概念我們都可以從早期的分布式技術里找到原型。

      【3】WCF服務框架模型

          下面我們來介紹一下WCF服務的基本結構。     WCF服務的基本結構如下圖所示:

       

      每個 Indigo 服務均由三個部分構成: 

          1.服務類:采用 C# 或 VB.NET 或其他基于 CLR 的語言編寫,實現一個或多個方法。通常包括服務契約、操作契約和數據契約。 
           2.宿主:一種應用程序域和進程,服務將在該環境中運行。ASP.NET,EXE,WPF,Windows Forms,NT Service,COM+作為宿主(Host) 。
           3.終結點:服務暴露出來的地址,由客戶端用于訪問服務。通常提及的概念就是ABC,即地址、綁定和契約的第一個字母的簡稱。 如圖:

       

         

      終結點中重要的概念就是綁定,它是實現通信的關鍵部分。這里定義消息通訊的協議包括HTTP、TCP、UDP、MSMQ等,用戶可以根據自己的需要定義。

      【4】實現代碼分析

            上面介紹了WCF相關的一些基本概念、特性和框架模型,現在我們來具體實現一個WCF的應用實例。客戶端和WCF服務通信的過程如圖:

       

          客戶端通過代理調用WCF服務,代理通過服務地址找到特定的服務,調用執行特定的服務方法。

          我們代碼的演示部分也分為3個部分,首先是服務類(契約部分),其次是宿主(自己定義一個控制臺程序),客戶端(控制臺)。

      【4.1】契約(Contract)

      定義實現的代碼包括服務契約IWCFService、操作契約OperationContract、和數據契約DataContract。具體代碼實現如下:

       

      復制代碼

      //ServiceContract 屬性以及 Indigo 使用的所有其他屬性均在 System.ServiceModel 命名空間中定義,
      //因此本例開頭使用 using 語句來引用該命名空間。
      namespace WCFService
      {
          //1.服務契約
          [ServiceContract(Namespace = "http://www.rzrgm.cn/frank_xl/")]
          public interface IWCFService
          {
              //操作契約
              [OperationContract]
              string SayHello(string name);
              //操作契約
              [OperationContract]
              string SayHelloToUser(User user);

          }
          //2.服務類,集成接口。實現契約
          public class WCFService : IWCFService
          {
              //實現接口定義的方法
              public string SayHello(string name)
              {
                  Console.WriteLine("Hello! {0},Using string ", name);
                  return "Hello! " + name;
              }
              //實現接口定義的方法
              public string SayHelloToUser(User user)
              {
                  Console.WriteLine("Hello! {0}    {1},Using DataContract ", user.FirstName, user.LastName);
                  return "Hello! " + user.FirstName + " " + user.LastName;
              }
          }
          //3.數據契約//序列化為XML,作為元數據封裝到服務里
          [DataContract]
          public struct User
          {
              [DataMember]
              public string FirstName;
              [DataMember]
              public string LastName;
          }

      }
      復制代碼

       

      【4.2】宿主(托管進程)

           WCFHost宿主進程托管服務WCFService,項目類型也為控制臺應用程序(你也可以創建其他的項目類型)。這里要添加對WCFService類庫的引用。托管采用反射方式動態創建服務的實例。具體代碼如下:

      復制代碼

      //采用自托管方式,也可以是IIS、WAS,Windows服務等用戶自定義程序托管服務
         public class WCFHost
          {
              static void Main(string[] args)
              {

                  //反射方式創建服務實例,
                  //Using方式生命實例,可以在對象生命周期結束時候,釋放非托管資源
                  using (ServiceHost host = new ServiceHost(typeof(WCFService.WCFService)))
                  {
                      //相同的服務注冊多個基地址
                      //添加服務和URI,用戶資源標識符
                      //Uri tcpAddress = new Uri("http://localhost:8001/WCFService");
                      Uri httpAddress = new Uri("http://localhost:8002/WCFService");
                      //Uri httpAddressLisening = new Uri("http://localhost:8002/WCFService");
                      //host.AddServiceEndpoint(typeof(WCFService.IWCFService), new WSHttpBinding(), tcpAddress);
                      host.AddServiceEndpoint(typeof(WCFService.IWCFService), new WSHttpBinding(), httpAddress);
                      //判斷是否以及打開連接,如果尚未打開,就打開偵聽端口
                      //if (host.State !=CommunicationState.Opening)
                      host.Open();
                      //顯示運行狀態
                      Console.WriteLine("Host is runing! and state is {0}",host.State);
                      //等待輸入即停止服務
                      Console.Read();
                  }
              }
          }
      復制代碼

           這里值得注意的就是綁定協議要和配置文件里的設置一樣,不然會出現編譯錯誤或者運行時異常。編譯結束會生成可執行文件EXE。

      【4.3】客戶端

           客戶端要添加對以上服務的引用,如果你初次建立服務,配置不當很容易出現引用服務失敗的問題,配置服務相關的錯誤和解決辦法我也整理到WCF分布式開發常見錯誤解決里了,大家需要的話可以參考,是在遇到苦難可以留言給我一起交流。

         客戶端的具體實現代碼如下:

      復制代碼

      class WCFClient
          {
              static void Main(string[] args)
              {
                  
                  //IWCFService proxy = ChannelFactory<IWCFService>.CreateChannel(new WSHttpBinding(),
                  //////new EndpointAddress("net.tcp://localhost:8001/WCFService"));
                  ////new EndpointAddress("http://localhost:8002/WCFService"));

                  WCFServiceClient wcfServiceProxy = new WCFServiceClient("WSHttpBinding_IWCFService1");

                  
                  //通過代理調用SayHello服務
                  Console.WriteLine(wcfServiceProxy.SayHello("Frank Xu Lei"));
                  ////通過代理調用調用SayHelloToUser,傳遞對象
                  User user = new User();
                  user.FirstName = "Lei";
                  user.LastName = "Frank";
                  Console.WriteLine(wcfServiceProxy.SayHelloToUser(user));
                  Console.Read();
              }
          }
      復制代碼

           這里可以通過兩種方式調用WCF服務,一種是自己編碼實現客戶端服務代理,要正確添加服務的地址。第二種是當客戶端添加服務成功以后,VS2008集成開發工具會在客戶端自動生成服務端的操作契約、服務契約等信息,當然包含客戶端服務代理類,這個比較關鍵。具體方法就是在客戶端項目右鍵添加服務應用。輸入服務偵聽的地址。查找到服務后添加引用會生成一系列服務引用的文件,如圖:

       

      【4.4】運行結果:

          首先要啟動服務宿主進程WCFhost.如圖:

         

         其次運行客戶端,結果如圖所示:

      【5】總結

         結果顯示調用成功,包括直接調用簡單的SayHello方法和通過數據契約調用SayHellotoUser方法。

          此系列文章的取名《WCF分布式開發步步為贏》。在此之前,我曾經整理出WCF分布式開發必備知識(4)WSE3.0構建Web服務安全(4)系列文章,主要系統介紹了微軟分布式開發的相關的技術:COM+(Enterprise Services)、.Net Remoting、MSMQ消息隊列、Web 服務、WSE3.0等相關知識。目的也就是為了學習WCF打下堅實的基礎。步步為營,步步為贏!這個也是本系列文章取名的真正目的原因!    如果你是.NET開發的程序員,老徐的建議是,有時間的話,看看微軟早期的分布式開發:COM+(Enterprise Services)、.Net Remoting、MSMQ消息隊列、Web 服務、WSE3.0等相關技術。這些技術看是陳舊,實際目前還是應用廣泛。而你想要真正成為一個企業應用系統集成領域的專家,這些技術必不可少。

         最后給出本節文章的示例代碼,供大家參考。下載連接:/Files/frank_xl/WCFServiceFrankXuLei.rar。希望能對大家有所幫助,也歡迎留言交流~如果感覺不錯,希望大家支持和繼續關注《WCF分布式開發步步為贏》的后續文章,謝謝~

      posted @ 2016-08-09 11:25  閆寶平  閱讀(3609)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 四虎国产精品永久在线| 精品素人AV无码不卡在线观看| 新民市| 国产精品综合av一区二区| 国内精品自国内精品自久久| 国产亚洲tv在线观看| 亚洲免费成人av一区| 亚洲日韩AV秘 无码一区二区| 天天爽夜夜爱| 四虎精品免费永久免费视频| 国产福利片无码区在线观看| 国产精品国产三级国产专| 艳妇乳肉豪妇荡乳xxx| 读书| 亚洲免费视频一区二区三区 | 国产伦精品一区二区三区妓女 | 亚洲av综合色一区二区| 久久天天躁夜夜躁狠狠ds005| 欧美日本精品一本二本三区| 久久香蕉国产线看观看怡红院妓院| 亚洲人成网站在线在线观看| 老子午夜精品888无码不卡 | 亚洲精品宾馆在线精品酒店| 肥大bbwbbw高潮抽搐| 午夜国产精品福利一二| 亚洲熟妇自偷自拍另欧美| 大香伊蕉在人线国产最新2005 | 一区二区三区在线 | 欧洲| 成在线人永久免费视频播放| 国产一区二区亚洲精品| 四虎成人精品永久免费av| 国产成AV人片久青草影院| 3d动漫精品一区二区三区| 日韩熟女乱综合一区二区| av中文字幕国产精品| 亚洲人成色77777| 97se亚洲国产综合自在线观看| 国产网友愉拍精品视频手机| 99久久伊人精品综合观看| 中文字幕久久六月色综合| 福利一区二区1000|