【问题标题】:Setting WCF InstanceContextMode (Per Call, Single) in web.confg在 web.config 中设置 WCF InstanceContextMode (Percall, Single)
【发布时间】:2011-04-26 06:24:26
【问题描述】:

在谷歌上搜索过很多次都没有遇到过这个。

我知道我可以通过修饰类名来设置实例:

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall, 
                 ConcurrencyMode = ConcurrencyMode.Multiple)]

但是我可以在web.config 文件中指定这个吗?

我知道我可以在 web.config / app.config 中指定限制(最大并发用户数等),并且这里的数字具有取决于实例模式的上下文 - 但如何指定模式(很可能是行为app.config/web.config) 的部分?

最初我们打算使用 Windows 服务。现在我们正在使用 WAS。 WAS 有什么不同吗?每个“每次调用”请求仍将获得它自己的“服务器”作为管道操作?

谢谢

【问题讨论】:

    标签: wcf instancecontextmode


    【解决方案1】:

    您无法使用开箱即用的功能更改 web.config 中的 InstanceContextModeConcurrencyMode,但您可以编写自定义扩展(行为或自定义 ServiceHost + ServiceHostFactory + 配置部分)来做到这一点. Here is the example 如何更改 InstanceContextMode 而不在服务类的属性中定义它。

    WAS 中的处理是一样的——每个服务类型仍然有自己的服务主机,每个请求都在自己的线程中处理。

    【讨论】:

      【解决方案2】:

      您不能在配置文件中配置 InstanceContextMode 和 ConcurrencyMode,在 WCF 中构建限制,我相信 MS 有其原因。

      关于在 WAS 中托管,如果您有一个使用 IIS 7/7.5 的 Web 服务器,建议您使用 WAS 来托管您的服务,因为您可以使用 IIS 管理来管理您的服务并从中获得很多内置功能。

      【讨论】:

      • 我同意,我能看到的第一个原因是服务本身的架构:要作为单例使用,服务必须设计为保持状态和管理并发,将这种基本行为从外部(即配置文件)可能会对应用程序产生不可预知的影响。
      【解决方案3】:

      根据之前的答案,如果不做一些工作,您将无法做到这一点。我最近不得不为一个客户做这件事,我在这里记录了它。我还提供了一个验证器,如果没有按照您的意愿配置服务,则不允许该服务启动。详情在这里changing-wcf-concurrency-programatically

      【讨论】:

        猜你喜欢
        • 2011-10-30
        • 1970-01-01
        • 2015-01-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多