在大多數綁定類中會有一個HostNameComparisonMode屬性,如下所示:
var tcpBinding = newNetTcpBinding();
tcpBinding.HostNameComparisonMode = HostNameComparisonMode.Exact;
該屬性知識如何進行主機名匹配,例如:服務端公開的終結點地址爲net.tcp://localhost/greeting,而客戶端可以使用不同的主機名來訪問此服務終結點,如下:
net.tcp://localhost/greeting
net.tcp://127.0.0.1/greeting
net.tcp://mycomputername/greeting
以上地址都可以使客戶端訪問到指定的服務終結點。這是因爲HostNameComparisonMode屬性的默認值爲StrongWildcard,該枚舉值表示忽略主機名匹配,也就是說,只要你能連接到服務終結點,用什麼主機名是無所謂的。
還有其他兩個可用的枚舉值,解釋如下:
· HostNameComparisonMode.Exact
設置爲Exact表示,主機名必須嚴格匹配,如果服務端公開的終結點地址的主機名爲localhost,那麼客戶端的終結點地址必須也使用localhost。否則客戶端將會出現EndpointNotFoundException。那麼什麼時候應該使用Exact呢?當你的服務所在機器有多個網卡,這時候你有多個ip地址,那麼客戶點可以使用如下的任何一個地址來訪問你的服務:
net.tcp://192.168.0.1/greeting
net.tcp://192.168.0.2/greeting
不過如果你使用了Exact值,那麼客戶只能使用你公開的那個終結點地址去訪問你的服務。
· HostNameComparisonMode. WeakWildcard
按照MSDN的解釋,使用此枚舉值,將會使WCF運行時首先按照Exact方式去匹配,如果沒有找到匹配,那麼就按照StrongWildcard方式來處理主機名。