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

《WCF 技術內幕》翻譯 17:第 1 部分 第 4 章 WCF 101 — 快速入門完整範例

     編輯:關於.NET

HelloWCF 最小實作

1. 定義服務契約

[ServiceContract]
public interface IHelloWCF {
    [OperationContract]
    void Say(string input);
}

2. 定義位址與繫結

Uri address = new Uri("https://localhost:4000/IHelloWCF");
BasicHttpBinding binding = new BasicHttpBinding();

3. 建立 ServiceHost、加入端點、啟動監聽

ServiceHost svc = new ServiceHost(typeof(HelloWCF));
svc.AddServiceEndpoint(typeof(IHelloWCF), binding, address);
svc.Open();
Console.WriteLine("Receiving application ready");
Console.ReadLine();
svc.Close();

4. 服務類別實作契約

public class HelloWCF : IHelloWCF {
    public void Say(string input) {
        Console.WriteLine("Message received: {0}", input);
    }
}

5. 編譯執行驗證

csc /r:System.ServiceModel.dll HelloWCFApp.cs
HelloWCFApp.exe
netstat -a -b  // 確認 4000 埠監聽

發送端:ChannelFactory 與 Proxy

ChannelFactory<IHelloWCF> factory = new ChannelFactory<IHelloWCF>(binding, new EndpointAddress(address));
IHelloWCF proxy = factory.CreateChannel();
proxy.Say("Hi there WCF");
  • ChannelFactory<T> 建構發送管線,CreateChannel() 回傳實作服務契約的透明 Proxy。
  • 發送端使用 EndpointAddress 而非 Uri,符合 WS-Addressing 標準。

觀察 SOAP 訊息

public void Say(string input) {
    Console.WriteLine("Body: {0}", input);
    Console.WriteLine(OperationContext.Current.RequestContext.RequestMessage.ToString());
}

BasicHttpBinding 產生簡單 SOAP 1.1 訊息。
改為 WSHttpBinding 後,訊息包含 WS-Addressing、WS-Security、WS-SecureConversation、Timestamp、加密資料等完整 WS-* 標頭,結構龐大複雜。

單行繫結變更即改變整個訊息協定堆疊,體現 WCF 「簡單物件模型」下隱藏的訊息導向本質。

發布中繼資料與產生 Proxy

  1. 加入 ServiceMetadataBehavior,設 HttpGetEnabled=true。
  2. 建立 MetadataExchangeBindings.CreateMexTcpBinding() + net.tcp://localhost:5000/IHelloWCF/Mex 端點,契約為 IMetadataExchange。
  3. 執行 svcutil.exe /target:code net.tcp://localhost:5000/IHelloWCF/Mex 產生 HelloWCFProxy.cs、output.config。
  4. 新專案引用生成代碼與配置,實例化 HelloWCFClient 呼叫服務,無需共用組件。

關鍵感悟

WCF 宏觀編程模型隱藏訊息細節,提供分布式物件錯覺。開發者必須理解繫結變更如何影響訊息結構,並在部署前關閉中繼資料發布與例外詳細資訊。

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