快捷搜索:

在流模式下保持服务实例的状态的两种设计方式

在WCF法度榜样设计中,办事工具若何实例化,对付利用法度榜样的机能有很大年夜的影响,这同时要兼顾到机能与可扩展,因为在WCF中办事类实例化与客户端有关,办事实例会根据客户真个哀求类型来确定办事实例的治理要领,当然也可以以声明的要领来显式定义办事的实例化的要领。

WCF中支持三种实例激活的类型:单调办事(Per Call Service),会为每次客户端哀求分配(销毁)一个办事实例。会话办事(Sessionful Service)则为每次客户端连接分配一个办事实例。单调办事(SIngletom Service)所有的客户端会为所有的连接和激活工具共享一个相同的办事实例。

经由过程以上的阐发我们发明单调办事是为每次的哀求分配一个新的实例,当然假如办事中要维持一些状态信息,那么这些状态信息也会被初始化。这意味着每次哀求都邑将状态从新初始化。现在我们有一个场景,我们要以二进制流的要领在办事和客户之间通报文件。根据WCF中应用流模式的约定,我们只能以单个的Stream 工具作为操作的输入输出参数,是以,为了上传一个文件,我们就得应用一些帮助的措施来实现诸如文件名,路径等信息的传送。下面给出了一个这样的场景:

在这儿我们声清楚明了三个字段:file用来保存客户传过来的文件名;path用来保存文件的存储路径;outStream以获得写文件的流。

响应的这儿也定义了操作左券:

这两个操作左券有一些约定:即先要调用RelativeSetting()措施来设置字段的值,为文件流的传输做筹备,接着我们就可以调用SendStream()措施来上传文件流了。

办事左券定义

[ServiceContract ]

public interface ISendStreamService{

[OperationContract]

void SendStream(Stream stream);

[OperationContract]

void RelativeSetting(string file, string destinationPath);//设置文件属性}

您可能还会对下面的文章感兴趣: