千家信息网

WCF Stream对象限制操作是怎样的

发表于:2025-01-21 作者:千家信息网编辑
千家信息网最后更新 2025年01月21日,本篇内容主要讲解"WCF Stream对象限制操作是怎样的",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"WCF Stream对象限制操作是怎样的"吧!WC
千家信息网最后更新 2025年01月21日WCF Stream对象限制操作是怎样的

本篇内容主要讲解"WCF Stream对象限制操作是怎样的",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"WCF Stream对象限制操作是怎样的"吧!

WCF支持Stream操作,尤其对于传递size过大的消息而言,如要考虑传递消息的效率,WCF推荐通过Stream进行操作。然而,WCF Stream操作规定了一些限制,在我们编写相关程序时,需要特别注意:

1、绑定的限制

如果需要使用Stream操作,可以使用的绑定只能是BasicHttpBinding,NetTcpBinding以及NetNamedPipeBinding。此外,在使用Stream操作时,不能使用Reliable Messaging。如果考虑到消息安全,则此方式是不可取的。

2、对Stream对象的限制

要作为服务操作所传递的消息对象,这样的对象必须是可序列化的。遗憾的是,FileStream类的定义却是不支持序列化的,我们能够使用的Stream 对象,包括Stream,MemoryStream等。使用Stream类对象是大多数Stream操作的***。一个有趣的现象是FileStream与Stream类型的转换。例如在服务契约的操作中,有如下的实现:

public Stream TransferDocument(Document document) { FileStream stream = new FileStream (document.LocalPath, FileMode.Open, FileAccess.Read); return stream; }

注意,操作TransferDocument()的返回类型为Stream,而方法的实现中,返回的对象则为FileStream类型。由于Stream类是FileStream类的父类,这样的实现没有问题。

然而,在客户端调用该操作时,却不能将操作的返回值赋给FileStream类型的对象,如下所示:

FileStream stream = m_service.TransferDocument(doc);

此时获得的Stream对象则为null。因而,我们只能这样调用操作:

Stream stream = m_service.TransferDocument(doc);

但是,还有一个奇怪的问题是WCF并不支持Stream对象Length属性的序列化,也就是说,在客户端我们不能使用服务操作返回的Stream对象的 Length属性。诸如stream.Length的调用会抛出NotSupportedException异常。

3、TransferMode的限制

若要使用Stream操作,必须修改绑定的TransferMode属性。该属性的默认值为Buffered。我们应该根据操作中WCF Stream对象的参数类型,以决定TransferMode的值分别为Streamed、StreamedRequest或者StreamedResponse。

4、MaxReceivedMessageSize的限制

MaxReceivedMessageSize属性的默认值为64kb,如果传递的Stream对象一旦超过了 MaxReceivedMessageSize属性的设置值,则客户端在操作该对象时,就会出现CommunicationException异常。因此,我们应根据实际需要设置MaxReceivedMessageSize的值。MaxReceivedMessageSize属性的取值范围为 1-9223372036854775807(Int32.MaxValue)。如果设置值不在该范围之内,则无法通过编译。编程方式设置为:

5、操作参数的限制

WCF Stream操作参数严格的限制,它只允许这样的操作只能包含一个Stream对象,这里所谓的一个WCF Stream对象,是包含return对象,out和ref对象在内的。也就是说如下的操作定义都是错误的:

void Transfer(Stream s1, Stream s2); void Transfer(Stream s1, out Stream s2); void Transfer(Stream s1, ref Stream s2); Stream Transfer(Stream stream);

如果定义了这样的操作,则会出现运行时错误。

此外,由于传输的WCF Stream对象较大,可能会消耗过长的时间,因而建议增大绑定的SendTimeout属性值。例如设置为10分钟。编程方式设置为:

binding.SendTimeout = TimeSpan.FromMinutes(10);

配置文件的设置方式为:

注意,对绑定的相关设置必须要求服务端与客户端的配置一致。***实践是均通过配置文件进行设置。例如在我的应用程序中是这样设置的:

  1. <basicHttpBinding> <binding name="DocumentExplorerServiceBinding" sendTimeout="00:10:00"
    transferMode="Streamed" messageEncoding="Text" textEncoding="utf-8" maxReceivedMessageSize="9223372036854775807">
    binding> basicHttpBinding>

到此,相信大家对"WCF Stream对象限制操作是怎样的"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

对象 限制 属性 类型 客户 方式 消息 服务 参数 客户端 序列 支持 配置 也就是 也就是说 内容 实际 文件 方法 程序 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 苏州品牌软件开发哪家好 江苏极光网络技术有限公司 服务器流量计费1g要访问多少人 西安高新区软件开发公司有几家 机关单位的网络安全意识 数据库数据加密技术des 网络安全叶敏 恶意攻击服务器怎么查 天津法律数据库 数据库的连接应用功能 50人同时用的云服务器配置 呼死你软件开发 网络安全工程师目标工作环境 oa的中外文数据库 征途服务端清空数据库教程 如何拆戴尔服务器电源螺丝 计算机通信与网络技术中的名词 阿里云可以架设海外服务器吗 数据统计类电脑软件开发 王者荣耀可转服务器多久更换 网络安全软件挣钱小游戏 网络安全学院毕业生去向 网页数据库查询工具 wps回复u盘数据库 数据库运维期末考试答案电大 实验室大型服务器价格 网络安全扫描哪些端口 河北同方服务器 通过代理服务器玩英雄联盟 三亚直播软件开发方案
0