详解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方式来处理主机名。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章