3、端口共享:
1)、HTTP/HTTPS端口共享:
对于端口共享最常见的就是基于HTTP/HTTPS的80|443端口共享,借助IIS相应的机制实现基于HTTP/HTTPS的端口共享。
IIS 6.0通过引入HTTP.SYS,这个不属于IIS范畴,用来监听网络请求的网络驱动,HTTP.SYS专用于HTTP请求的监听,IIS和其他web应用使用它作为自己的监听器,从而实现端口共享。
2)、TCP端口共享:
TCP的端口共享不能通过IIS来实现,是通过Net.TCP端口共享服务(Net.TCP Pon Sharing Service)的windows服务实现的。
a、Net.TCP端口共享服务:功能上将它和HTTP.SYS相同的功能,即请求的监听和分发,不同的是,HTTP.SYS运行于内核模式下,而Net.TCP运行于用户模式下,安装了.net Frameword 3.0以及以上版本的都有Net.TCP服务。
b、TCP端口共享与NetTcpBinding:
默认情况下,windows下Net.TCP Port Sharing service是关闭的,需要手动打开,WCF通信中,NetTCPBinding实现了通信的所有细节,其中有一个布尔类型的属性PortSharingEnabled,表明是否启动端口共享,但是必须在Host开启的时候设置这个属性才有效。
using(ServiceHost host=new ServiceHost(typeof(Service1))
{
NetTcpBinding binding =new NetTcpBinding();
binding.PortSharingEnabled= true;
host.AddServiceEndpoint(typeof(IService1),binding,"net.Tcp://127.0.0.1:9999/service1");
host.open();
}
配置上,也可以完成这个动作,对于配置中绑定属性,都有一个name属性,在具体服务终结点配置的时候,就可以指定调用哪个绑定配置,如果绑定配置没有名称,则会自动应用到所有采用了相应绑定类型的终结点上。
<bindings>
<netTcpBinding>
<binding name ="portSharingBinding" portSharingEnabled="true"/>
</netTcpBinding>
<basicHttpBinding>
<bingding ...../>
</basicHttpBinding>
</bindings>
4、逻辑地址和物理地址
逻辑地址:终结点中EndpointAddress对象的Uri就是代表服务的逻辑地址,
物理地址:对于服务端来说就是监听地址,对于客户端来说就是真正发送的目标地址,默认情况下,这两个地址是一样的,但是有时候需要分离开来。
1)、服务的角色:
分为三种:服务消费者,服务提供者,还有一个中介服务。通常情况下,中介服务可以不需要,服务消费者直接请求服务提供者,进行服务调用,但是,中介服务在进行负载均衡的时候会用到,接收服务消费者的请求,然后分发到各个服务提供者去。
由于有了中介服务的这个角色,可以使得服务的逻辑地址和物理地址不同,对于服务消费者,逻辑地址就是服务提供者的地址,物理地址就是中介服务的地址。
2)、监听地址和监听模式:
服务端,物理地址就是用于请求监听的地址,可以通过设置ListenUri设置监听地址,但是最终的监听地址还取决于监听模式ListenUriModel。
a、ListenUri:可以通过服务的ServiceHost的AddServiceEndpoint方法初始化服务的ListenUri地址,也可以通过配置的方式设置:
<endpoint .... address="..." listenUri="...." /> 如果没有设置ListenUri,则ListenUri默认就是终结点的地址。
b、ListenUriModel:监听模式有两个枚举值,是Explicit和Unique,Explicit表示严格采用终结点的ListenUri属性设置的Uri作为最终的监听地址,二Unique则根据ListenUri采用不同的策略保证最终监听地址的唯一性,对于TCP未启用端口共享的,会重新启动一个新端口保证监听地址的唯一性,对于已启动端口共享的TCP协议,和那些非TCP协议的,会在监听地址后面添加一个GUID保证监听地址的唯一性。
设置方法:直接给终结点的ListenUrlMode属性赋值,或者采用配置的方式:<endpoint address="..." listenUriMode="Unique" listenUri="...."/>
3)、ClientViaBehavior行为:
客户端实现两个地址分离是通过终结点行为实现的,行为分为四种:服务行为、契约行为、操作行为和终结点行为,其中契约行为和草组行为被定义成特性,应用到契约接口或服务类以及对应的操作方法上,终结点行为通过配置的方式应用到服务端和客户端,对于服务行为可以采用配置的方式也可以通过特性的方式应用。
服务行为和终结点行为的配置如下:
<behaviors>
<serviceBehaviors>
<behavior name ="...">...</behavior>
.....
<serviceBehaiviors>
<endpointBehaviors>
<behavior name ="...">....</behaivior>
</endpointBehaviors>
</behaviors>
然后,服务和终结点通过对应的behaviorConfigurate进行找到对于的配置。
在WCF 4.0中,支持默认的行为配置,如果<behaviro>没有名称,则会应用到所有服务或者终结点上。
终结点行为System.ServiceModel.Description.ClientViaBehavior实现了客户端逻辑地址和物理地址的分离,ClientViaBehavior的Uri属性代表着消息发送的目标物理地址。
配置方式:<behavior name ="...">
<clientVia viaUri="...."/>
</behavior>
浙公网安备 33010602011771号