问题标签 [instancecontextmode]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
wcf - WCF 实例上下文模式
我有一个 Web 应用程序使用代理来调用 WCF 服务上的操作,该服务从 AS400 返回数据,例如与我们公司关联的不同销售区域、我们在现场的不同商店等。这些销售区域和商店不要经常改变,商店可能一年只增加两次,而且几年来地区都是一样的。
我想我的困惑在于 InstanceContextMode。当代理客户端调用 GetRegions() 或 GetStoresForRegion(int regionNumber)
如果我将 InstanceContextMode 设置为 single 并在任何服务操作调用之前初始化和填充区域和存储,这会有所帮助吗?基本上现在,它在每次调用时都会进行数据库查找,我认为没有必要。
所以用户登录到 Web 应用程序 -> Web 应用程序页面 -> 必须加载区域下拉列表 -> Web 开发人员调用代理来获取区域......但是当每个用户都使用 Web 应用程序时就会发生这种情况,所以基本上每次用户访问 Web 应用程序,代理调用数据库,我认为这是愚蠢的,我设置服务操作的方式有误,或者我完全误解了什么?
更新 - 服务是 IIS 托管的,所以这整个问题可能没有实际意义
.net - 当 InstanceContextMode.Single WCF 服务公开多个端点时存在多少个实例?
无论端点数量如何,该设置是否ServiceBehavior
设置InstanceContextMode.Single
单个实例?
linq-to-sql - 使用 DataContextFactory 在 WCF 服务中管理 Linq to SQL Datacontext
我一直在 ASP.Net 应用程序使用的数据层中使用 Rick Strahl 的 DataContextFactory 代码(Linq to SQL DataContext Lifetime Management)。它工作得很好,因为当前数据上下文存储在 HttpContext.Items 集合中。我知道我正在为每个 Web 请求重用相同的数据上下文。
但是,我一直无法在 WCF 服务中成功使用工厂。在非 HttpContext 应用程序上,工厂将数据上下文存储在线程数据槽中。
问题是,无论我如何在服务中设置 ConcurrencyMode 和 InstanceContextMode,每次调用都会重用线程,并重用相同的 dataContext。我不想要这个。我只希望每个服务方法调用存在一个数据上下文。有什么方法可以使用工厂来实现吗?我无法在每个客户端调用上找到任何唯一信息以用作我的数据上下文的标识符,因此它不会被其他请求重用......无论它是否是同一个客户端。
我想使用我的业务层而不是直接访问我的数据层,但恐怕我可能不得不在我的 WCF 服务中规定我自己的工作单元和数据上下文。有没有人在 WCF 服务中为他们的数据上下文使用某种工厂?我希望有一种方法让我的工厂知道它是否被 WCF 服务使用,然后唯一地处理数据上下文的存储
然后在这里可以做些什么来实现我想要的?
wcf - 在 web.confg 中设置 WCF InstanceContextMode (Per Call, Single)
还没有遇到过这个有相当多的谷歌搜索。
我知道我可以通过这样装饰类名来设置实例:
web.config
但我可以在文件中指定这个吗?
我知道我可以在web.config
/中指定限制(最大并发用户数等),app.config
并且这里的数字具有取决于实例模式的上下文 - 但是如何指定模式(很可能是app.config
/的行为部分web.config
)?
最初我们打算使用 Windows 服务。现在我们正在使用 WAS。WAS 有什么不同吗?每个“每次调用”请求仍将获得它自己的“服务器”作为管道操作吗?
谢谢
wcf - Workflow 4 服务应用和InstanceContextMode & ConcurrencyMode
问题很简单:如何在 WF4 WCF 工作流服务应用程序中设置 InstanceContextMode 和 ConcurrencyMode?
wcf - 如何配置 WCF 服务以使用 PerCall 实例上下文运行?
这是背景信息。我有一个像这样配置的 WCF 服务
现在我需要一些帮助来准确理解这种上下文模式是如何工作的。
这是我正在处理的问题。为了争论,假设我有一个调用需要 10 秒来执行并从服务器返回。如果我同时拨打两个电话(使用 Ajax 请求),第一个请求将在 10 秒后返回。但第二个请求将在 20 秒后返回。
我期望这种上下文模式将独立处理两个请求,并同时返回两个请求。我是否正确配置了我的服务?
wcf - WCF 中 AppDomain 的生命周期是多少?
WCF 中 AppDomain 的生命周期是多少?
它是否与 InstanceContextMode、ConcurrencyMode 和/或 AspNetCompatibilityRequirements RequirementsMode 有关?
我想知道我的静态变量将存在多长时间以及它们必须多久重新创建一次。
json - WCF wsHttpBinding、webHttpBinding 和 REST 中的 InstanceContextMode.Single
我最近开始开发一个相对简单的 WCF REST 服务,它返回 JSON 格式的结果。起初一切都很好,服务很快就启动并运行了。
该服务的主要功能是返回从数据库中提取的大量数据。这些数据很少改变,所以我决定尝试设置一个缓存机制来加快速度。为此,我计划设置 InstanceContextMode.Single 和 ConcurrencyMode.Multiple,然后使用一些线程锁,安全地返回静态缓存结果。每隔 5 分钟左右,或者每当 IIS 决定清除所有内容时,都会从数据库中重新获取数据。
我的问题是 InstanceContextMode.Single 没有按预期运行。我的理解是应该创建和维护我的 WCF 服务类的单个实例。但是,我的行为是每次调用都会创建我的 Class 的全新实例。这包括重新初始化所有静态变量。
我尝试将 Web 服务从 webHttpBinding(用于 REST)更改为 wsHttpBinding 并将该服务用作 SOAP 配置,但这会导致完全相同的行为。
我究竟做错了什么!!!花了太长时间试图弄清楚这一点。
任何帮助都会很棒!
wcf - 每个会话的 WCF 实例化模式未按预期工作
我正在编写一个生成数据集的 WCF 应用程序,并允许客户端创建它们、浏览它们并从中检索数据。数据存储在服务类的静态变量中。特别是,它们存储在字典中,使用 GUID 字符串作为键。
我将服务类的实例化模式设置为 PerSession,据我所知应该可以工作。客户端调用一个名为 CreateRecordSet 的函数,该函数将一个条目添加到字典中并返回密钥字符串。然后客户端调用一个名为 First() 的函数,该函数应该检索数据集中的第一条记录。但是,当它尝试这样做时,字典不再包含任何条目。
奇怪的是,如果我将实例化模式设置为 Single,它工作正常。但是,如果我将它设置为 PerSession,它似乎会丢失两个调用之间的字典,如果我将它设置为 PerCall,我会预料到这一点。
这是接口定义:
这是服务类代码:
这是客户端代码:
如您所见,我在主机的控制台中添加了一些调试消息以显示字典的状态。这是主机的输出:
当然,当我尝试引用 RecordSets[setkey] 时,我在 First() 的下一行代码中遇到异常,因为 RecordSets 是空的。
如果我将行为更改为:
...然后它按预期工作。主机输出变为:
...然后客户端按预期打印客户名称,没有错误。
那么我错过了什么?我的理解是,只要我对两个调用都使用相同的 ServiceReference (MyService),那么如果服务器的 InstanceContextMode 设置为 PerSession,它们应该在服务器上共享相同的静态变量。我不正确吗?
-乔
wcf - 为什么 InstanceContextMode.Single 服务会在关闭时处理单例?
我有一个装饰为 InstanceContextMode.Single 的 WCF (4.0) 服务,实现该服务的类遵循单例模式。
我首先使用 Instance 属性创建我的服务实现的单例实例。然后我将此单个实例传递给 ServiceHost 的构造函数,而不是使用带有 typeof() 参数的构造函数。
我可以在服务上执行 Open(),然后可以执行 Close(),一切都很好。但显然在 Close() 上,它以某种方式处理了我的单例 (???),因为当我在同一个 ServiceHost 上再次尝试 Open() 时,抛出了 ObjectDisposedException。
我的服务由 Windows 窗体应用程序中的 NetTcpBInding 托管。