首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

WCF 分散式開發實戰(一):WCF 分散式框架基礎觀念全解析

     編輯:關於.NET

系統間低耦合一直是企業級應用整合追求的目標,SOA 面向服務架構為企業資源整合提供了指導原則。微軟在 .NET 平台推出 WCF (Windows Communication Foundation) 作為統一分散式通訊框架,整合了 Enterprise Services (COM+)、.NET Remoting、ASMX Web Service、WSE 3.0、MSMQ 等所有分散式技術。本系列「WCF 分散式開發步步為贏」將系統整理 WCF 核心觀點、特性、架構模型與入門實作,助您打穩分散式開發基礎。

一、WCF 基礎觀念

什麼是 WCF?

WCF 全名 Windows Communication Foundation,是微軟為建構面向服務應用提供的分散式通訊程式框架,屬 .NET Framework 3.5 核心組件。開發人員可利用此框架建置跨平台、安全、可靠、支援交易的企業級互聯應用方案。

依微軟官方定義,WCF(早期代號 Indigo)是使用受控代碼建立與執行面向服務應用程式的統一框架,能建立跨平台、安全、可信賴、交易性的解決方案,並與既有系統相容協作。WCF 整合了 .NET 平台所有分散式技術:

  • Enterprise Services (COM+)
  • .NET Remoting
  • Web Service (ASMX)
  • WSE 3.0 (Web Services Enhancements)
  • MSMQ 訊息佇列

通訊範圍涵蓋跨進程、跨機器、跨子網、企業網路至 Internet;宿主類型支援 ASP.NET、EXE、WPF、Windows Forms、NT Service、COM+;通訊協定包含 TCP、HTTP、Named Pipe、自訂協定;安全模式支援 SAML、Kerberos、X.509、UserName/Password、自訂等標準。掌握 WCF 即掌握叩開 SOA 大門的鑰匙。

SOA 概念釐清

SOA (Service-Oriented Architecture) 是架構模式與設計原則;Programming WCF Services 一書將 SOA 解釋為 Service-Oriented Application(面向服務應用程式),兩者不衝突,後者為採用 SOA 架構設計實作的應用程式。

二、WCF 三大核心特性

  1. 統一性:整合多種 Microsoft 分散式技術,單一程式模型應對不同通訊需求。
  2. 互通性:支援跨廠商標準協定 (WS-*),實現異構平台互操作。
  3. 面向服務:明確的服務導向設計,契約優先、邊界明確、自主性與共享契約/結構描述。

各前代技術特性與 WCF 對比表(略)。

三、WCF 服務架構模型

每個 WCF 服務由三大部分構成:

WCF 服務基本結構

  1. 服務類別:C#/VB.NET 等 CLR 語言撰寫,實作一或多個方法,包含服務契約、操作契約、資料契約。
  2. 宿主:應用程式域與進程,服務運行環境。可為 ASP.NET、EXE、WPF、WinForms、NT Service、COM+ 等。
  3. 端點:服務對外暴露的存取位置,客戶端透過端點訪問服務。核心為 ABC 三要素:
    • A (Address):服務在哪裡 (URI)。
    • B (Binding):如何通訊 (協定、編碼、傳輸、安全)。
    • C (Contract):提供什麼功能 (服務/操作/資料契約)。

端點 ABC 三要素

繫結是通訊關鍵,定義訊息傳輸協定 (HTTP、TCP、UDP、MSMQ 等) 可依需求自訂。

四、入門實作程式碼分析

客戶端透過 Proxy 呼叫 WCF 服務流程:

客戶端呼叫服務流程

方案三專案結構:服務類別庫、Console 宿主、Console 用戶端。

4.1 契約定義

namespace WCFService
{
    [ServiceContract(Namespace = "https://www.cnblogs.com/frank_xl/")]
    public interface IWCFService
    {
        [OperationContract] string SayHello(string name);
        [OperationContract] string SayHelloToUser(User user);
    }

    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;
        }
    }

    [DataContract]
    public struct User
    {
        [DataMember] public string FirstName;
        [DataMember] public string LastName;
    }
}

4.2 宿主程式

public class WCFHost
{
    static void Main(string[] args)
    {
        using (ServiceHost host = new ServiceHost(typeof(WCFService.WCFService)))
        {
            Uri httpAddress = new Uri("https://localhost:8002/WCFService");
            host.AddServiceEndpoint(typeof(WCFService.IWCFService), new WSHttpBinding(), httpAddress);
            host.Open();
            Console.WriteLine("Host is runing! and state is {0}", host.State);
            Console.Read();
        }
    }
}

4.3 用戶端程式

用戶端加入服務參考後,VS 自動產生 Proxy 類別:

用戶端服務參考檔案

class WCFClient
{
    static void Main(string[] args)
    {
        WCFServiceClient proxy = new WCFServiceClient("WSHttpBinding_IWCFService1");
        Console.WriteLine(proxy.SayHello("Frank Xu Lei"));

        User user = new User { FirstName = "Lei", LastName = "Frank" };
        Console.WriteLine(proxy.SayHelloToUser(user));
        Console.Read();
    }
}

4.4 執行結果驗證

先啟動宿主:

宿主啟動畫面

再執行用戶端:

用戶端呼叫成功

結果顯示簡單字串與資料契約物件呼叫均成功。

五、總結與系列規劃

本文建立 WCF 基礎觀念、架構模型與最簡實作。系列文章將深入服務契約、資料契約、操作契約、交易、安全、訊息佇列等核心主題,並穿插與舊技術 (COM+、Remoting、MSMQ、WSE) 對比分析。作者建議 .NET 開發者若有時間,應回顧早期分散式技術,這些雖顯陳舊但仍廣泛應用,是成為企業系統整合專家的必修課。步步為營,步步為贏!

本文配套原始碼下載

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved