2009-05-29 46 views
2

我有一个Web应用程序使用代理来调用在从一个AS400返回的数据,像我们公司相关的不同销售区域WCF服务的操作,不同的店,我们在外地,等有出这些销售地区和商店不会经常更改,商店只能每年添加两次,而地区在一两年内也一样。WCF InstanceContextMode

我想我的困惑在于InstanceContextMode。当代理客户端调用GetRegions()或GetStoresForRegion(int regionNumber)时,我只返回“Regions”和“Stores”列表

如果我将InstanceContextMode设置为单个,并且已将区域和存储初始化并填充为在任何服务操作呼叫之前,这会以任何方式提供帮助吗?基本上现在,它在每次通话时都进行数据库查询,我不认为有这种需要。

因此,用户登录到Web应用程序 - > Web应用程序页面 - >必须加载下拉区域 - > Web开发人员调用代理来获取区域...但是,当每个用户使用Web应用程序时都会发生这种情况基本上每次用户访问Web应用程序,代理都会调用数据库,我相信这是愚蠢的,并且是我设置服务操作的错误,还是我完全误解了某些内容?

更新 - 服务是IIS托管,所以这整个问题可能是没有实际意义

回答

1

的基本最佳实践的建议是使用每个呼叫,单一实例服务。这是最简单的创建,没有并发恶梦等

BUT:当然每次调用该服务时,会创建一个服务实例和数据库后端查询。

如果有可能,尽量坚持这一点。尝试将缓存逻辑放入数据库 - 如果有足够的RAM,则大部分频繁请求的数据将保留在内存中。

去一个ConcurrencyMode =多在你的WCF服务使各种并发问题显示出来,你需要与非常小心。尽可能避免这种情况。

尝试每次通话,单实例第一和唯一的优化,如果你真的有!

马克

+1

InstanceContextMode =多重不存在,我想你的意思ConcurrencyMode.Multiple – 2010-11-17 13:46:23