首页 文章

WCF InstanceContextMode

提问于
浏览
2

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

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

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

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

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

1 回答

  • 1

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

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

    如果可能的话,尽量坚持下去 . 尝试将缓存逻辑放入数据库 - 如果有足够的RAM,大多数经常请求的数据将保留在内存中 .

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

    首先尝试按次呼叫,单个实例,如果你真的必须优化,只进行优化!

相关问题