WCF 通过RoutingService访问Service无法实现PerSession
高手们帮帮忙。情况如下,
Client请求Service,中间通过Routing Service,使用的Binding都是wsHttpBinding。
Service Contract:SessionMode.Required
Service Behavior:InstanceContextMode.PerSession
Routing Service Contract:IRequestReplyRouter。
一个Client的同一个Proxy多次调用同一个Service,虽然Service被配置成PerSession的,但处理一个Client的同一个Proxy多次调用的实例却不是同一个实例。
这是不是因为Routing Service会在与Client的一个会话内(Routing Service是PerSession的)通过多个内部Proxy来向Service发消息导致的?
若是,怎么解决?
若不是,原因是什么,怎么解决?
[解决办法]
我又看了看,我推测你的filter配置是通过Action一个个配的。每个Routing filter 应该对应一个Session。
所以如果你改为 MatchAll 的话,应该OK
[解决办法]
注意下面配置中,被注释的部分的filterType=Action,改用MatchAll
<routing> <filters> <filter name="ServiceRouter_Filter1" filterType="MatchAll" filterData="http://tempuri.org/IService1"/> <!--<filter name="ServiceRouter_Filter2" filterType="Action" filterData="http://tempuri.org/IService1/GetName"/> <filter name="ServiceRouter_Filter3" filterType="Action" filterData="http://tempuri.org/IService1/SetName"/>--> </filters> <filterTables> <filterTable name="ServiceRouterTable"> <add filterName="ServiceRouter_Filter1" endpointName="WcfService1"/> <!--<add filterName="ServiceRouter_Filter2" endpointName="WcfService1"/> <add filterName="ServiceRouter_Filter3" endpointName="WcfService1"/>--> </filterTable> </filterTables> </routing>