【问题标题】:WCF InstanceContextModeWCF 实例上下文模式
【发布时间】:2009-05-29 13:43:56
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: wcf instancecontextmode


    【解决方案1】:

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

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

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

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

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

    马克

    【讨论】:

    • InstanceContextMode = multiple 不存在,我想你的意思是 ConcurrencyMode.Multiple
    • @PB:当然-我会更新我的答案-感谢您的指出!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-23
    • 1970-01-01
    • 2019-08-02
    相关资源
    最近更新 更多