代码改变世界

WCF 第五章 一个单一实例中的多线程

2010-12-02 21:45 by DanielWise, 5203 阅读, 0 推荐, 收藏, 编辑
摘要:默认的InstanceContextMode行为设置指导WCF为每个请求创建一个新的服务实例。然后在很多情况下,这不是最好的解决方案。例如,如果一个服务有一个代价很高的例行初始化(比如,一个构造器从一个数据库读取数据或者创建一个大的内存结构),它对每个服务请求的实例创建都不是很高效。为了创建一个被当前线程共享的单一服务实例,InstanceContextMode.Single应该与ConcurrencyMode.Multiple结合使用。InstanceContextMode.Single意味着只能有一个实例被创建,而ConcurrencyMode.Multiple设置指导WCF在那个实例中同 阅读全文

WCF 第五章 不支持会话的绑定的默认并发和实例

2010-12-02 21:14 by DanielWise, 3081 阅读, 0 推荐, 收藏, 编辑
摘要:列表5.1 显示了一个没有定义任何并发或实例行为的服务,它指导WCF使用默认值,ConcurrencyMode.Single和InstanceContextMode.PerSession.当使用这些设置和一个不支持会话的绑定时,比如basicHttpBinding,WCF创建为每个它接收到的请求创建一个新的服务实例并在它自己的线程里执行代码。它在返回前会等待5秒。列表5.1 使用默认并发和实例行为的服务 [ServiceContract] public interface IStockService { [OperationContract] double GetPrice(string ti 阅读全文

WCF 第五章 并发和实例(服务行为)

2010-12-01 21:45 by DanielWise, 1716 阅读, 1 推荐, 收藏, 编辑
摘要:并发是一个多少个任务可以同时执行的度量,以任务(请求,工作,事务,以及类似的)的形式度量。执行时间是一个任务多长时间完成的度量,以时间(毫秒,秒,其他的时间单位等)度量。吞吐量是在一个指定时间里可以完成多少个任务的度量,以任务/时间(请求/秒, 事务/分,等等)的形式度量。吞吐量是关于并发和执行时间的函数。有两种方式来增加吞吐量:减少执行时间或者增加并发量。减少一个独立任务的执行时间可以通过改变任务调度间隔算法或者添加额外的硬件资源,所以WCF对这些都无能为力。并发可以通过并行执行任务来实现。WCF有两种控制并发的行为: InstanceContextMode 和 ConcurrencyMod 阅读全文

WCF 第五章 行为

2010-11-30 21:59 by DanielWise, 1155 阅读, 0 推荐, 收藏, 编辑
摘要:行为是WCF影响运行时操作的类。行为作为WCF运行时被调用,在客户端和服务端运行并作为消息在两者之间流转。因为行为运行在这些重要的时间,它们被用来实现很多WCF的内建特性。它们也是一个重要的自定义扩展点。例如,ServiceHost用来定义一个服务端的实例和并发方面,另外也分发消息给适当的操作。当一条消息被一个服务接收到并分发给一个类的特定方法时,ServiceHost应该为每次请求创建一个类的实例还是重用实例?但ServiceHost调用类的方法时,它需要加入到一个事务的列表中吗?这些都在行为中定义并且在初始化中使用。行为有三种初始类型。服务行为运行在服务端并能访问所有终结点。它们控制一些诸 阅读全文

WCF 第四章 绑定 WCF绑定总结

2010-11-30 13:09 by DanielWise, 2187 阅读, 1 推荐, 收藏, 编辑
摘要:信道架构把一系列分布式编程技术统一为一个单独的编码模型。这个架构允许服务独立于传输协议和编码协议而创建,因此支持多种通信形式。绑定是支持特殊通信类型的预先设置好的信道栈。WCF提供9种预定义绑定。 这里有一些在WCF中使用信道和绑定的指导原则。netTcpBinding 绑定用来跨机器通信的.NET应用程序间。netNamedPipeBinding绑定可以用在所有本机的.NET应用程序间的通信。这包括进城间和进程内(也就是说,在应用程序域内和应用程序域间)的通信。basicHttpBinding绑定支持基于WS-I 基础协议1.1 的继承Web 服务。这个绑定常用来调用ASP.NET ASMX 阅读全文

WCF 第四章 绑定 在多个绑定上暴露一个服务契约

2010-11-30 12:52 by DanielWise, 2470 阅读, 1 推荐, 收藏, 编辑
摘要:这一章的之前部分描述了使用netTcpBinding和wsHttpBinding绑定暴露服务。这些绑定中的每一个都用来支持特殊通信场景。例如,netTcpBinding绑定对于.NET应用程序间的通信是很理想的,wsHttpBinding绑定支持使用Web 服务的不同平台间的通信,basicHttpBinding绑定支持不支持高级协议的Web 服务间的通信。 通过在一个服务中使用多个终结点,你可以配置一个服务通过多个绑定暴露它的能力,这就像在第二章”一个服务中的多个契约和终结点”描述的那样。这意味着客户端可以使用更多被支持的可选绑定来连接到服务端。通用的场景是使用netTcpBinding绑定 阅读全文

WCF 第四章 绑定 绑定元素

2010-11-29 21:56 by DanielWise, 988 阅读, 0 推荐, 收藏, 编辑
摘要:WCF在预设绑定中提供了很多信道和编码器。这些信道提供了在自定义绑定中使用的绑定元素。这一部分提供WCF内部绑定元素列表以及它们的使用方面。传输下面的列表是信道以及它们相关的绑定类,绑定扩展和它们的XML配置元素。它们中的每一个都代表了一个可以用在自定义绑定中的不同的传输信道。传输信道存在于TCP,HTTP,命名管道,HTTP(SSL/TSL加密),MSMQ和对等网络。UDP传输信道不包括在.NET 3.5中。它是以Windows SDK 中的一个样例提供的。它被放在这里是因为它也是WCF中很常用的传输模式。编码器下面的列表是WCF中包含的编码器。它们代表了一个消息类被传输信道转换成一个字节流 阅读全文

WCF 第四章 绑定 创建一个自定义绑定

2010-11-29 16:52 by DanielWise, 1613 阅读, 0 推荐, 收藏, 编辑
摘要:有很多时候预先设置好的绑定不满足你的服务的需求。一般的场景包含了自定义安全和额外传输协议,都不被WCF支持。一个例子是WCF中不支持UDP协议。对UDP协议的支持是以Windows SDK 中的例子来实现的。考虑到这些情况所以WCF提供了创建自定义绑定的能力。自定义绑定可以由代码或配置文件创建。一个自定义绑定的代码使用System.ServiceModel.Channels命名空间中的CustomBinding 类来生成。这个类暴露了一个你可以添加绑定元素的绑定元素集合。这允许你构造一个基于一系列现有绑定元素的新的绑定。列表4.32 显示了一个由代码生成的自定义绑定。列表4.32 使用代码创建 阅读全文

WCF 第四章 绑定 msmqIntegrationBinding

2010-11-28 16:44 by DanielWise, 1101 阅读, 0 推荐, 收藏, 编辑
摘要:msmqIntegrationBinding 绑定用来在一个WCF应用程序和一个直接利用MSMQ的应用程序间通信-比如,使用System.Messaging.这允许开发人员利用WCF同时也使用他们已有的MSMQ应用程序。msmqIntegrationBinding绑定允许MSMQ消息映射到WCF消息。这通过在MsmqMessage类中对MSMQ消息包装来实现的。类位于System.ServiceModel.MsmqIntegration命名空间里。实例可以使用单向契约被发送或接收。 下面的代码显示了msmqIntegrationBinding绑定的地址格式: msmq.formaname:{M 阅读全文

WCF 第四章 绑定 netMsmqBinding

2010-11-28 14:52 by DanielWise, 2042 阅读, 1 推荐, 收藏, 编辑
摘要:MSMQ 为使用队列创建分布式应用程序提供支持。WCF支持将MSMQ队列作为netMsmqBinding绑定的底层传输协议的通信。netMsmqBinding绑定允许客户端直接把消息提交到一个队列中同时服务端从队列中读取消息。客户端和服务端之间没有直接通信过程;因此,通信本质是断开的。也意外着所有的通信必须是单向的。因此,所有的操作必须要在操作契约上设置IsOneWay=true属性。提示 动态创建队列使用netMsmqBinding时动态创建MSMQ队列是很普通的。当创建一个离线客户端应用而且队列在一个用户的桌面时使用netMsmqBinding绑定更加平常。这可以通过创建System.Me 阅读全文