当前位置: 代码迷 >> Web Service >> WCF 通过RoutingService访问Service无法实现PerSession解决方案
  详细解决方案

WCF 通过RoutingService访问Service无法实现PerSession解决方案

热度:306   发布时间:2016-05-02 02:59:32.0
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 

XML code
<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>
  相关解决方案