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

WCF 入門實戰:從零建立最簡服務與客戶端完整流程

     編輯:關於.NET

Windows Communication Foundation (WCF) 是 .NET 統一的分散式應用開發框架,整合了 ASMX、Remoting、WSE、MSMQ 等技術。本文以最簡範例示範 WCF 服務端與客戶端的完整建立流程。

WCF 核心優勢

  • 統一性:單一程式模型涵蓋所有分散式通訊需求
  • 互操作性:基於 SOAP,跨平台(J2EE、Linux 等)互通
  • 安全可靠:支援 WS-Security、WS-Trust、WS-SecureConversation
  • 相容性:不影響現有 ASMX/Remoting 應用
  • 託管彈性:可寄宿於 IIS、Windows Service、Console、WPF、WinForms 等
  • 傳輸多樣:HTTP、TCP、Named Pipe、自訂協定

服務端建立步驟

1. 定義服務合約

[ServiceContract]
interface IWCFService {
    [OperationContract]
    void SayHello();
}

2. 實作服務類別

class WCFService : IWCFService {
    public void SayHello() => Console.WriteLine("Hello, You!");
}

3. 建立寄宿應用程式

以 Console Application 為例:

class HostMain {
    static void Main() {
        var host = new ServiceHost(typeof(WCFService), new Uri("https://localhost:8080/HelloToYou"));
        host.AddServiceEndpoint(typeof(IWCFService), new BasicHttpBinding(), "Svc");
        host.Open();
        Console.WriteLine("I'm Here. Press any key to exit.");
        Console.ReadKey();
        host.Close();
    }
}

4. 啟用中繼資料發布(解決瀏覽器訪問 404/錯誤)

專案新增 App.config,複製錯誤頁面建議的配置片段,修改 service name 為完整類別名稱 WCFHelloWorld.WCFService,確保 behaviorConfiguration 與 <behavior> 名稱一致。

主控台執行畫面

瀏覽器中繼資料錯誤

修正後成功頁面

客戶端建立步驟

1. 產生 Proxy 類別

cd "C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin"
svcutil.exe https://localhost:8080/HelloToYou

產生 output.config(重命名為 app.config)與 WCFServiceClient.cs。

svcutil 產生檔案

2. 建立客戶端專案並引用

將產生的兩個檔案加入專案,編寫呼叫代碼:

class WCFClientApp {
    static void Main() {
        using (var client = new WCFServiceClient()) {
            client.SayHello();
        }
        Console.ReadKey();
    }
}

3. 執行驗證

先啟動服務端,再啟動客戶端,主控台輸出 Hello, You!。

客戶端執行結果

關鍵點總結

環節關鍵動作
合約定義[ServiceContract] + [OperationContract]
寄宿ServiceHost + AddServiceEndpoint(Binding, Address)
中繼資料<serviceMetadata httpGetEnabled="true"/> 在 behavior 中啟用
Proxy 產生svcutil.exe [服務 URL]
客戶端呼叫using (var client = new ClientProxy()) 確保正確關閉

進階學習方向

  • 資料合約 ([DataContract]/[DataMember]) 與序列化
  • 錯誤處理 (FaultException<T>) 與 IErrorHandler
  • 安全性:傳輸/訊息層級、憑證、Windows 認證
  • 可靠傳訊 (wsHttpBinding + reliableSession)
  • REST 風格服務 (WebHttpBinding + WebGet/WebInvoke)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved