2 回答
TA贡献1772条经验 获得超8个赞
WCF 在某种程度上是一个完整的 SOA 架构,提供给您开箱即用的多种协议支持,并且所有内容都是可配置的,此外您还可以扩展自定义所有内容。所以得到所有是非常棘手的。只是基础知识:
三种类型的 WCF并发是:
Single:单个请求在给定时刻可以访问 WCF 服务对象。
多个:在这种情况下,WCF 服务对象可以在任何给定时刻处理多个请求。
可重入:单个请求线程可以访问 WCF 服务对象,但线程可以退出 WCF 服务调用另一个 WCF 服务,也可以通过回调调用 WCF 客户端重新进入而不会死锁。
看起来很简单,但等待它具有与并发不同的实例 模式:
- 每次调用都会为每个客户端请求创建一个新的 InstanceContext(因此也是服务对象)。
- 每个会话为每个新的客户端会话创建一个新的 InstanceContext(以及因此服务对象),并在该会话的生命周期内维护(这需要支持会话的绑定)。
- 单个实例:单个 InstanceContext(因此也是服务对象)处理应用程序生命周期内的所有客户端请求。
默认实例模式为每个会话,默认并发模式为单一
这意味着对于 WCF 服务,在您更改服务之前,您的服务只有一个实例上下文,一次最多允许一个线程处理实例上下文中的消息。希望使用相同实例上下文的其他线程必须阻塞,直到原始线程退出实例上下文
因此,除非您为此进行了代码更改并希望它发生,否则您所担心的似乎是不可能的。
更多详情请参考:MSDN
TA贡献1891条经验 获得超3个赞
您应该更改您的服务以使它们不依赖于HttpContext.Current
. 最好是完全不依赖HttpContext
。
HttpContext.Current
是 UI 线程的服务器端等效项。只是不要在不需要依赖它的代码上使用它。
- 2 回答
- 0 关注
- 161 浏览
添加回答
举报