【7】ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple,InstanceContextMode = InstanceContextMode.PerCall) --Multiple并发与PerCall实例模型
1.图8-16单调模型和多线程模型描述
2.对于Multiple并发模型,应当是多线程的并发访问模式,但对于PerCall实例模型中,每个线程与一个独立的服务实例进行交互,所以一般不会产生并发冲突。但如果服务实例中使用了静态变量或全局数据缓存的时候,在多线程操作这些共享资源时需要手动编写同步代码,以确保这些共享资源不会发生并发冲突。
3.要想防止多个服务实例对静态变量修改操作产生并发冲突,需要我们手写代码对它进行同步保护。
服务端代码做如下修改
4.使用lock语句段,把变量修改与显示的代码锁定在一起,防止其实服务实例的并发修改冲突。
5.图8-17单调模型和多线程模型运行结果
【8】ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple,InstanceContextMode = InstanceContextMode.PerSession) --Multiple并发与PerSession实例模型
1.图8-18会话模型和多线程模型描述
2.“Multiple并发+PerSession实例模型”会对每个客户端的多线程请求指派一个服务实例进行处理,多线程的请求同一个服务时,同样并不会自动锁定该服务,对于服务中的数据进行修改的时候也需要我们手动编写同步代码进行保护。
3.图8-19会话模型和多线程运行结果
4.从图8-19中我们看出,服务端的确有两个服务在运行(42931033和20974680),这两个服务实例分别出现了一次数据重复。并且是同一服务实例内的数据重复,即说明了同一客户端的多线程
调用发生了并发冲突。防止并发冲突的同步锁定代码:
lock (this)
{
...
}
【9】ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple,InstanceContextMode = InstanceContextMode.Single) --Multiple并发与Single实例模型
1.图8-20单例模型和多线程模型描述
2.这种并发模型与实例模型的匹配算是多线程并发操作的一个极佳搭配。在Single实例模型中,所有客户端的所有线程共享一个服务实例,这样可以很好地解决多个客户端的不同线程间的状态共享的问题。可是这种实例模型的吞吐量会小于PerCall实例模型的吞吐量,因此我们可以使用Multiple并发模型来增加其吞吐量,可以允许多个客户端线程对服务实例同时调用。但这样也最容易对一些共享数据和共享资源引起并发冲突,所以需要我们手动编写代码对共享数据和共享资源进行并发保护。
3.图8-21单例模型和多线程模型运行结果
4.从上面图8-21中看出,服务端只有一个服务实例,三个线程同时运行,产生并发冲突。
5.总结上面的内容,增加系统吞吐量可以提升服务的效率。但影响吞吐量的因素比较多,如:实例模型、并发模型和调用模型等。
2.3限流
1.可以配置服务行为的serviceThrottling属性来对WCF服进行限流。
MaxConcurrentCalls:限制客户端发起的并发请求数量 – 缺省为16
MaxConcurrentInstances:限制服务端服务实例的数量。
MaxConcurrentSessions:限制活动会话数量-缺省值10
2.配置代码如下
(3)实现代码分析及运行结果
3.1WCFService(服务端源码分析)
3.2WCFHost(宿主源码分析和运行结果)
运行结果见图8-22服务器运行结果
3.3WCFClient(客户端源码分析和运行结果)
运行结果见图8-23客户端运行结果
(4)源码下载
http://download.csdn.net/source/3054422
(5)下一篇计划
下一篇主要介绍WCF中队列服务的相关知识。
(6)参考说明
1.《Programming WCF Services》
2.http://hi.baidu.com/grayworm
分享到:
相关推荐
**限流概述**是WCF并发管理中的另一个重要概念。限流是控制服务处理速率的一种机制,可以防止过多的并发请求导致系统资源耗尽。WCF通过设置服务的行为配置,可以限制并发请求数、最大接收消息数等,以达到服务级别的...
让我们深入探讨一下“WCF按部就班学习系列7:WCF事务概述”中的核心知识点。 1. **WCF事务属性**:在WCF服务中,可以通过配置或编程方式启用事务。服务行为`ServiceBehavior`可以设置`TransactionEnabled`属性为`...
在“WCF按部就班学习系列1”中,我们将深入探讨WCF的基础知识,包括服务契约、宿主定义等关键概念。 **服务契约** 服务契约是WCF中的核心概念,它定义了服务提供的操作及其交互方式。服务契约通过接口(Interface...
WCF实例管理的概述,WCF服务实例激活类型三种方式概述和单例服务的完整代码。
**WCF错误概述** Windows Communication Foundation (WCF) 是微软提供的一个全面的、统一的编程模型,用于构建面向服务的应用程序。在WCF中,错误处理是不可或缺的一部分,确保服务的稳定性和可靠性。本篇文章将...
学习这个系列,初学者可以理解WCF的基本架构,掌握如何定义和使用数据契约,创建服务契约,以及如何在不同的环境中(如IIS、自承载等)部署和运行WCF服务。同时,通过实际的代码示例,有助于深入理解和应用WCF技术。
在本文中,我们将深入探讨WCF(Windows Communication Foundation)服务契约这一核心概念,以及如何通过实例来理解并实现它的重载。WCF是.NET Framework中一个强大的服务导向架构,用于构建分布式应用程序,允许不同...
**WCF(Windows Communication Foundation)**是微软推出的一种面向服务的通信框架,它提供了一种构建高度互操作的、安全的、可靠的服务的方法。在WCF中,**操作**是服务的基本工作单元,用户通过调用这些操作来与...
C#WCF 服务并发管理,编程源代码,包括线程池的例子。
当前pdf总共有7个部分: WCF服务编程中文版_1 WCF服务编程中文版_2 WCF服务编程中文版_3 WCF服务编程中文版_4 WCF服务编程中文版_5 WCF服务编程part1 WCF服务编程part2
8. **调试与诊断**:学习如何通过WCF的诊断工具和日志功能来排查问题。 9. **服务宿主**:WCF服务可以宿主在IIS、自承载或Windows服务中,理解不同宿主的优缺点和适用情况。 10. **服务版本管理**:如何设计服务...
当前pdf总共有7个部分: WCF服务编程中文版_1 WCF服务编程中文版_2 WCF服务编程中文版_3 WCF服务编程中文版_4 WCF服务编程中文版_5 WCF服务编程part1 WCF服务编程part2
标题中的“wcf.rar_wcf_wcf C#”暗示了这是一个关于Windows Communication Foundation(WCF)的项目,其中包含了C#语言的实现。WCF是微软.NET Framework的一部分,用于构建可互操作的分布式系统,允许服务提供者和...
当前pdf总共有7个部分: WCF服务编程中文版_1 WCF服务编程中文版_2 WCF服务编程中文版_3 WCF服务编程中文版_4 WCF服务编程中文版_5 WCF服务编程part1 WCF服务编程part2
当前pdf总共有7个部分: WCF服务编程中文版_1 WCF服务编程中文版_2 WCF服务编程中文版_3 WCF服务编程中文版_4 WCF服务编程中文版_5 WCF服务编程part1 WCF服务编程part2
**WCF(Windows Communication Foundation)** 是微软推出的一种面向服务的、用于构建分布式应用程序的框架。它提供了多种机制,如消息交换、服务发现、安全性和事务处理,来帮助开发者构建可伸缩、可靠且安全的网络...
本教程“Pro_WCF_Practical_Microsoft_SOA_Implementation-3297”专注于实践性学习,帮助开发者深入理解WCF的核心概念和技术,以及如何在实际项目中有效应用。通过一系列示例,你将学习到如何创建、配置和服务的调试...
WCF文件上传服务允许用户在不完整的网络连接情况下继续文件传输,提高了用户体验并降低了数据丢失的风险。 首先,我们需要理解WCF的基本概念。WCF是一种面向服务的架构,它提供了统一的编程模型来创建、发布、发现...
在“WCF.rar_wcf_whalewpf”压缩包中,包含的文件主要涉及WCF服务的创建、调用以及不同宿主方式的实现。** 1. **WCFClient**: 这个文件夹很可能包含了WCF服务的客户端应用程序,用于调用WCF服务。在WCF中,客户端...
标题中的“WCF与Linq_To_SQL与Silverlight”指的是三种关键的技术,它们在现代.NET框架中的应用广泛,尤其在构建分布式系统、数据管理和富客户端应用程序方面。 **Windows Communication Foundation (WCF)** 是微软...