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

| 組成部分 | 型別 | 功能 | 必要性 |
|---|---|---|---|
| Uri | Uri | 端點網路位址 | 必要 |
| Identity | EndpointIdentity | 驗證服務身分 (DNS、UPN、SPN、RSA 等) | 可選 |
| Headers | AddressHeaderCollection | SOAP Header 擴展資訊,供路由/過濾使用 | 可選 |
額外屬性:IsAnonymous 指示是否允許匿名存取。
<host>
<baseAddresses>
<add baseAddress="https://localhost:8731/" />
</baseAddresses>
</host>
<endpoint address="https://localhost:8731/Service"
binding="basicHttpBinding"
contract="Wcf_Address_Config.IService1" />
端點位址完整獨立,不依賴基底位址。
<host>
<baseAddresses>
<add baseAddress="https://localhost:8731/" />
</baseAddresses>
</host>
<endpoint address="Service1"
binding="basicHttpBinding"
contract="Wcf_Address_Config.IService1" />
端點位址 = 基底位址 + 相對路徑 → https://localhost:8731/Service1。
優點:部署遷移只需修改基底位址,所有相對端點自動更新。
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" />
客戶端可根據網路環境選擇最優端點連接,傳統技術難以辦到。