我有一个Web应用程序使用代理来调用WCF服务上的操作,该服务从AS400返回数据,例如与我们公司关联的不同销售区域,我们在该领域中的不同商店等。这些销售地区和商店不会经常变化,商店每年只增加两次,而且几年内地区相同。
我想我的困惑在于InstanceContextMode。当代理客户端调用GetRegions()或GetStoresForRegion(int regionNumber)时,我只返回“Regions”和“Stores”列表
如果我将InstanceContextMode设置为single并且在任何服务操作调用之前将区域和存储区初始化并填充,那么这会有什么帮助吗?现在基本上,它在每次通话时都进行数据库查询,我认为没有必要。
因此用户登录到网络应用程序 - >网络应用页面 - >必须加载区域的下拉 - > Web开发人员调用代理来获取区域......但是当每个用户使用Web应用程序时都会发生这种情况,所以基本上每次用户访问Web应用程序时,代理都会调用DB,我相信这是愚蠢的我设置服务操作的方式有误,还是我完全误解了什么?
更新 - 服务是IIS托管的,因此整个问题可能没有实际意义
答案 0 :(得分:1)
基本最佳做法建议是使用每次呼叫,单实例服务。这是最简单的创造,没有并发噩梦等。
但是:当然每次调用服务时,都会创建一个服务实例并查询数据库后端。
如果可能的话,尽量坚持下去。尝试将缓存逻辑放入数据库 - 如果您有足够的RAM,大多数经常请求的数据将保留在内存中。
在WCF服务中转到ConcurrencyMode = multiple会导致出现各种并发问题,需要非常小心。尽可能避免这种情况。
首先尝试按次呼叫,单个实例,如果真的必须进行优化!
马克