詳解HostNameComparisonMode屬性

在大多數綁定類中會有一個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方式來處理主機名。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章