WCF 基礎加開發簡介

來源:互聯網
上載者:User

http://www.cnblogs.com/myg2006/archive/2008/03/09/1097189.html

WCF --- Windows Communiction Foundation,是一個Microsoft推出已久的技術。已久有很多人寫了不少關於WCF的文章,比如談談WCF系列等,都是很好的文章。我只是想說一些基礎的東西,然後寫一個例子,讓目前剛開始學習WCF的人有一個感性的瞭解,希望能給他們的學習帶來一點用處,同時是自己對WCF認識加深的一個過程。

WCF是一個統一的,可用於建立安全,可靠的面向服務的應用高效的開發平台。WCF是構建安全可靠的事務性服務的統一架構。它是一種構建分布式面向服務系統的非常豐富的技術基礎,它統一了訊息風格和RPC[Remote Procedure Call]風格,並且通過二進位和基於開放標準的通訊達到了平台最佳化。

它整合了.Net平台下所有的和分布式系統有關的技術,例如ASP.NET Web服務(ASMX)、增強Web服務擴充(WSE)、.Net Remoting、企業服務(Enterprise Service)和微軟訊息佇列(MSMQ)。

而要理解WCF,你首先要理解WCF基本的組成部分,分別為:

  • Message  --- Soap Message, WCF不僅支援XML格式,而且還支援更加高效的Binary格式
    • Header   --- Message的Header,通常是附屬資訊,可以零個或多個
    • Body  --- Message的Body,通常是主題資訊,可以零個或多個
  • Channel  --- 傳輸Message的通常,可以建立多個Channel,通常包括下面四部分資訊,但一般不用我們指定,而是在配置Service/Endpoint中指定
    • Security  --- 傳輸安全性
      • Message Securty  --- Message的安全性,通常驗證方式有Windows Authentication 或 X.509 或 Custom
        • Authentication  --- 驗證
        • Integrity  --- 訊息完整性
        • Confidentiality  --- 訊息機密性,加密解密
        • Auditing  --- 審核
      • Transport Security  --- Transport的安全性
        • Https  --- 針對Http來說的安全傳輸
        • Other
    • Interoperability  --- 互動性,我的理解是,可以替代的服務類型
      • WebService
      • WSE
      • .Net Remoting
      • Enterprise Service
      • MSMQ
      • Other
    • Message pattern  --- Message的傳輸方式
      • Simplex  --- 單向傳輸,如A-->B
      • Duplex  --- 雙向傳輸,如A<---->B,A先發送資訊到B,B返回一個狀態,然後A再發Message,然後B Response
      • Request-Respose  --- 要求/回複,A-->B,B-->A
    • Transport  --- 傳輸類型,Message是通過什麼形式傳輸的
      • Http --- 無需儲存串連狀態
      • Tcp --- 需要儲存串連狀態,在Exchange Data的時候,會維護一個State
      • MSMQ  --- 通常用於需要可靠的Message傳輸的時候
      • Named Pipes  --- 通常用於單個PC的不同處理序間通訊
  • Service
    • Service
      • Contract  --- 契約
        • Data Contract  --- 資料契約,告訴程式該資料可以用於WCF傳輸,通常用來指定我們自訂的Model對象,是serializable的一種類型,命名空間為System.Runtime.Serialize。
        • Service Contract  --- 服務契約,告訴程式這是該一個WCF服務
        • Operation Contract  --- 操作契約,告訴程式,這是該Service對外暴露的可以執行的操作
      • Implementation  --- Operation Contract的具體實現
    • Endpoint --- 在外界看來,服務的串連接地址
      • Address  --- 服務的具體地址,根據Transport類型,可以是Http,Tcp等
      • Binding  --- 下面的表徵圖是Binding的不同類型
      •  
      • Contract  --- 對外暴露的介面
    • Behavior  --- Service在執行時,要執行的一個行為,比如安全驗證
      • Throttling  --- 決定同一時間一個Service可以使用的Thread數量、Service的執行個體數,傳遞的Message數量
      • Security  --- 決定Service的安全特性
      • Instancing  --- 決定Service實作類別的可以建立的執行個體數
        • PerCall  --- 用戶端的每次Request都會產生一個InstanceContext
        • PerSession  --- 根據每個用戶端的Session來產生一個InstanceContext,並且和這個Session有相同的生命週期
        • Single  --- 單例模式
      • Error Handling  --- 但Service遇到異常並且需要返回資訊時的處理方式
      • Concurrency  --- 控制一個InstanceContext可以跨多少個線程
        • Multiple  --- 可以跨多個線程
        • Single  --- 只能在單行程內執行
        • Reentrant  --- Each instance of the service can only process messages one at a time but can accept re-entrant operation calls
      • Transactions  ---  決定Service是否可以接受並執行來自用戶端的事務.注意事務是用戶端建立的,因此事務的完成與否由用戶端決定,當然生命週期也是如此。
      • Custom  --- 自訂行為
    • Host  --- WCF的寄宿主,即運行Service的地方
      • Console Application
      • Web Application
      • WinForms Application
      • IIS
      • Service

下面我做一個簡單一實例來說明一下,一個WCF的開發,調用過程。

一,首先我們建立一個Console Application,叫做WCFDemo

二,我們既然要開發WCF,當然要引入一個WCF Service Application了,叫做Service,如果你不想建立單獨的項目,你可以在別的項目中添加WCF Service的Item。在建立WCF Project的時候會自動產生IService和Service.svc,通常IService這個Service Contract我們是不會要的,因為調用Service的Client也需要用,所以我們會把他們放到統一的地方,本例中是叫Interface的項 目。單純的Service.svc是很簡單的一個實現了IService介面的一個類,沒有什麼特別之處,

   1:  namespace Service
   2:  {
   3:      // NOTE: If you change the class name "Service1" here, you must also update the reference to "Service1" in Web.config and in the associated .svc file.
   4:      public class Service : IService
   5:      {
   6:          public Computer GetComputer()
   7:          {
   8:              Computer computer = new Computer();
   9:              computer.ComputerName = "Ralax - PC";
  10:              return computer;
  11:          }
  12:      }
  13:  }

需要注意的是,ServiceClient繼承關係,以及建構函式

ServiceClient完成後,就是Client的調用了,如下:

   1:  namespace WCFDemo
   2:  {
   3:      class Program
   4:      {
   5:          static void Main(string[] args)
   6:          {
   7:              using(ServiceClient sClient = GetService())
   8:              {
   9:                  Console.WriteLine(sClient.GetComputer().ComputerName);
  10:                  Console.Read();
  11:              }            
  12:          }
  13:   
  14:          public ServiceClient GetService()
  15:          {
  16:              WSHttpBinding binding = new WSHttpBinding();
  17:              EndpointAddress address = new EndpointAddress(new Uri("http://localhost/WCFDemo/Service.svc"));
  18:              ServiceClient client = new ServiceClient(binding, address);
  19:              return client;
  20:          }
  21:      }
  22:  }
 
這個例子,我已經打包了,可以在這裡下載:http://files.cnblogs.com/myg2006/WCFDemo.rar

 wcf開發學習:http://www.cnblogs.com/jillzhang/category/121346.html

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.