千家信息网

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

发表于:2025-11-15 作者:千家信息网编辑
千家信息网最后更新 2025年11月15日,本篇内容主要讲解"WCF Stream对象限制操作是怎样的",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"WCF Stream对象限制操作是怎样的"吧!WC
千家信息网最后更新 2025年11月15日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安全错误 数据库的锁怎样保障安全 ip地址与服务器地址 青少年网络安全线上宣传 科技时代 互联网 教育 厦门软件开发行情价 企业网络安全等级保护制度编制 搜索关于网络安全的那个手抄报 福建启迪互联网科技公司 计算机与网络安全书籍 网络安全信息职称 矿大网络安全硕士待遇 手赚app软件开发 农行北京总部软件开发中心 软件开发和移动互联哪个更好 支持服务器模式的搜索工具 天盛网络技术有限公司 vpn服务器搭建教程 不动产数据库项目前期展望 经开区软件开发课程 服务器防护是什么意思 计算机网络技术pdf网盘 电脑哪里可找到服务器和端口 青少年网络安全线上宣传 中科曙光服务器品牌 护苗网络安全课堂图片 网络安全审计 大学排名 网络安全法治体系解读评论 中国互联网科技股份有哪些 家用宽带服务器很慢 如何做好能源行业数据库信息 青岛凯丹网络技术有限公司
0