返回顶部
首页 > 资讯 > 精选 >WCF Stream对象限制操作是怎样的
  • 168
分享到

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

2023-06-17 20:06:50 168人浏览 独家记忆
摘要

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

本篇内容主要讲解“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)。如果设置值不在该范围之内,则无法通过编译。编程方式设置为:

<binding …… maxReceivedMessageSize="120000"/>

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);

配置文件的设置方式为:

<binding …… sendTimeout="00:10:00"/>

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

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

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

--结束END--

本文标题: WCF Stream对象限制操作是怎样的

本文链接: https://lsjlt.com/news/292665.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • WCF Stream对象限制操作是怎样的
    本篇内容主要讲解“WCF Stream对象限制操作是怎样的”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“WCF Stream对象限制操作是怎样的”吧!WCF支持Stream操作,尤其对于传递si...
    99+
    2023-06-17
  • WCF Stream操作限制实例分析
    这篇文章主要讲解了“WCF Stream操作限制实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“WCF Stream操作限制实例分析”吧!WCF支持对Stream对象的操作,尤其对于传...
    99+
    2023-06-17
  • JavaScript中操作对象的方法是怎样的
    本篇文章给大家分享的是有关JavaScript中操作对象的方法是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Object.create...
    99+
    2024-04-02
  • php的array()操作的是数组还是对象
    在PHP中,array()操作的是数组,是允许对数组操作的函数,该函数的作用是创建数组;PHP支持单维和多维的数组,同时提供了用数据库查询结果来构造数组的函数,语法为“array(value1,value2,value3,etc.)”或者“...
    99+
    2022-07-11
    php
  • HTML DOM对象模型是怎样的
    本篇文章给大家分享的是有关HTML DOM对象模型是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。这里向大家简单介绍一下HTML DOM...
    99+
    2024-04-02
  • ASP.NET对请求处理过程的操作是怎样的
    本篇内容介绍了“ASP.NET对请求处理过程的操作是怎样的”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!当请求一个*.aspx文件的时候,这...
    99+
    2023-06-17
  • awk的操作是怎么样的
    本篇文章给大家分享的是有关awk的操作是怎么样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。awk是一种用于处理文本、模式匹配的编程语言。与sed和grep,俗称Linux下...
    99+
    2023-06-05
  • 对Python循环对象的理解是怎么样的
    对Python循环对象的理解是怎么样的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。循环对象的并不是随着Python的诞生就存在的,但它的发展迅速,特别是Python 3x...
    99+
    2023-06-02
  • Python怎么限制替换操作的次数
    在Python中,可以使用re.sub()函数结合指定替换次数来限制替换操作的次数。re.sub()函数用于执行正则表达式的替换操作...
    99+
    2024-04-02
  • HBase的工作机制是怎样的
    本篇内容介绍了“HBase的工作机制是怎样的”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!HBase – Hadoop Database,是...
    99+
    2023-06-02
  • 关于JavaScript 的对象的介绍是怎样的
    本篇文章为大家展示了关于JavaScript 的对象的介绍是怎样的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1. 对象方法 & this方法只是保存函数...
    99+
    2024-04-02
  • Oracle Spatial基本操作是怎样的
    Oracle Spatial基本操作是怎样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Spatial主要通过元数据表、空间数据字段(即sd...
    99+
    2024-04-02
  • MySQL DDL操作实践是怎样的
    本篇文章给大家分享的是有关MySQL DDL操作实践是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。根据网上的DDL 树状图,自己cop...
    99+
    2024-04-02
  • Python作用域的操作步骤是怎样的
    本篇文章给大家分享的是有关Python作用域的操作步骤是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。局部,上层,模块,内置python编辑器按照变量定义的位置来确定作用...
    99+
    2023-06-17
  • JavaScript的三种BOM对象分别是怎样的
    这篇文章将为大家详细讲解有关JavaScript的三种BOM对象分别是怎样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。window 对象给我们提供了一个 location 属性用于获取或...
    99+
    2023-06-21
  • PHP+MYSQL的分页是怎样操作的
    本篇文章为大家展示了PHP+MYSQL的分页是怎样操作的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。寫php是簡單的事,但是分頁可困擾小弟好一陣子°因為手邊的書好...
    99+
    2024-04-02
  • Python Library中的Semaphore操作是怎样的
    这篇文章将为大家详细讲解有关Python Library中的Semaphore操作是怎样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Python Library作为计算机语言中...
    99+
    2023-06-17
  • PHP怎么使用MySQLi中的MySQLI_result对象操作
    这篇文章主要为大家展示了“PHP怎么使用MySQLi中的MySQLI_result对象操作”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“PHP怎么使用MySQLi中的MySQLI_result对...
    99+
    2023-06-20
  • MySQL与MongoDB的操作命令对比以及区别是怎样的
    本篇文章为大家展示了MySQL与MongoDB的操作命令对比以及区别是怎样的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。  MySQL与MongoDB都是开源的常...
    99+
    2024-04-02
  • ABAP工作进程对数据库表读取操作的检测是怎样的
    本篇文章给大家分享的是有关ABAP工作进程对数据库表读取操作的检测是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。小编要介绍的,是使用SM50检测出工作进程长时间读取一张...
    99+
    2023-06-03
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作