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

WCF 從理論到實踐 (4):Address 位址完整指南

     編輯:關於.NET

文章導讀

本文系統闡述 WCF Endpoint Address 結構組成、配置檔與程式碼兩種設定方式、絕對/相對位址差異、服務描述位址與端點位址的常見誤區、多重發布位址特性。適合 WCF 初學者建立位址配置正確觀念。

核心知識點

  • EndpointAddress 結構:URI、Identity、Headers
  • 配置檔設定:絕對位址 vs 相對位址
  • 程式碼設定:EndpointAddress 建構子
  • 服務描述位址 (mex) 與端點位址的區別
  • 多重基底位址同時發布特性

一、Address 結構組成

EndpointAddress 結構

組成部分型別功能必要性
UriUri端點網路位址必要
IdentityEndpointIdentity驗證服務身分 (DNS、UPN、SPN、RSA 等)可選
HeadersAddressHeaderCollectionSOAP Header 擴展資訊,供路由/過濾使用可選

額外屬性:IsAnonymous 指示是否允許匿名存取。

二、配置檔設定 Address

1. 絕對位址

<host>
  <baseAddresses>
    <add baseAddress="https://localhost:8731/" />
  </baseAddresses>
</host>
<endpoint address="https://localhost:8731/Service"
          binding="basicHttpBinding"
          contract="Wcf_Address_Config.IService1" />

端點位址完整獨立,不依賴基底位址。

2. 相對位址

<host>
  <baseAddresses>
    <add baseAddress="https://localhost:8731/" />
  </baseAddresses>
</host>
<endpoint address="Service1"
          binding="basicHttpBinding"
          contract="Wcf_Address_Config.IService1" />

端點位址 = 基底位址 + 相對路徑 → https://localhost:8731/Service1。
優點:部署遷移只需修改基底位址,所有相對端點自動更新。

三、程式碼設定 Address

static void Main(string[] args) {
    // 直接指定完整端點位址
    EndpointAddress address = new EndpointAddress("https://127.0.0.1:2136/Service1");
    Binding binding = new BasicHttpBinding();
    var proxy = new Wcf.IService1Client(binding, address);
    Console.WriteLine(proxy.GetData(2));
    Console.Read();
}

適用於動態決定端點位址(如從設定中心讀取、服務發現)。

四、常見誤區:服務描述位址 ≠ 端點位址

錯誤認知:設定 httpGetEnabled="true" httpGetUrl="https://localhost:8731/Service" 即設定了端點位址。

正確理解:

  • httpGetUrl 指定 WSDL/中繼資料 發布位址:https://localhost:8731/Service?wsdl
  • 端點位址由 <endpoint address="..."> 獨立決定
  • 兩者完全無關,切勿混淆

五、特殊應用:一份程式碼,多重發布位址

WCF 支援單一服務同時在多個位址發布(需相同傳輸協定):

<host>
  <baseAddresses>
    <add baseAddress="https://localhost:8731/" />
    <add baseAddress="net.tcp://localhost:8732/" />
    <add baseAddress="net.pipe://localhost/Service/" />
  </baseAddresses>
</host>
<endpoint address="HttpEndPoint" binding="basicHttpBinding" contract="IService" />
<endpoint address="TcpEndPoint" binding="netTcpBinding" contract="IService" />
<endpoint address="PipeEndPoint" binding="netNamedPipeBinding" contract="IService" />

客戶端可根據網路環境選擇最優端點連接,傳統技術難以辦到。

總結

  1. Address = URI (必要) + Identity (安全驗證) + Headers (擴展路由)
  2. 配置檔推薦「基底位址 + 相對位址」模式,利於部署維護
  3. 程式碼設定適合動態場景
  4. 切記區分:端點位址 (業務通訊) vs 中繼資料位址 (WSDL 發布)
  5. 多重基底位址發布是 WCF 獨特優勢,彈性部署利器
本文配套源碼下載
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved