2

我有一个 Web 应用程序使用代理来调用 WCF 服务上的操作,该服务从 AS400 返回数据,例如与我们公司关联的不同销售区域、我们在现场的不同商店等。这些销售区域和商店不要经常改变,商店可能一年只增加两次,而且几年来地区都是一样的。

我想我的困惑在于 InstanceContextMode。当代理客户端调用 GetRegions() 或 GetStoresForRegion(int regionNumber)

如果我将 InstanceContextMode 设置为 single 并在任何服务操作调用之前初始化和填充区域和存储,这会有所帮助吗?基本上现在,它在每次调用时都会进行数据库查找,我认为没有必要。

所以用户登录到 Web 应用程序 -> Web 应用程序页面 -> 必须加载区域下拉列表 -> Web 开发人员调用代理来获取区域......但是当每个用户都使用 Web 应用程序时就会发生这种情况,所以基本上每次用户访问 Web 应用程序,代理调用数据库,我认为这是愚蠢的,我设置服务操作的方式有误,或者我完全误解了什么?

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

4

1 回答 1

1

基本的最佳实践建议是使用每次调用的单实例服务。这是最容易创建的,没有并发噩梦等。

但是:当然,每次调用服务时,都会创建一个服务实例并查询数据库后端。

如果可能的话,试着坚持下去。尝试将缓存逻辑放入数据库 - 如果您有足够的 RAM,那么您经常请求的大部分数据将保留在内存中。

在您的 WCF 服务中转到 ConcurrencyMode = multiple 会导致出现各种并发问题,您需要非常小心。尽可能避免这种情况。

尝试每次调用,首先尝试单实例,并且仅在确实需要时才进行优化!

马克

于 2009-05-29T14:00:52.433 回答