知识大全 谈谈WCF Stream对象限制操作

Posted 操作

篇首语:人生来就不是为了被打败的,人能够被毁灭,但是不能够被打败。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 谈谈WCF Stream对象限制操作相关的知识,希望对你有一定的参考价值。

谈谈WCF Stream对象限制操作  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

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

   绑定的限制

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

   对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异常

   TransferMode的限制

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

   MaxReceivedMessageSize的限制

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

  <binding …… maxReceivedMessageSize= /> 操作参数的限制

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

  void Transfer(Stream s Stream s ); void Transfer(Stream s out Stream s ); void Transfer(Stream s ref Stream s ); Stream Transfer(Stream stream); 如果定义了这样的操作 则会出现运行时错误

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

  binding SendTimeout = TimeSpan FromMinutes( ); 配置文件的设置方式为

  <binding …… sendTimeout= : : /> 注意 对绑定的相关设置必须要求服务端与客户端的配置一致 最佳实践是均通过配置文件进行设置 例如在我的应用程序中是这样设置的

cha138/Article/program/net/201311/12235

相关参考

保险代位求偿的对象限制

保险代位求偿的对象限制任何对保险标的的损害负有赔偿责任的第三人,都可以成为保险人代位求偿的对象。第三人既可以是自然人,也可以是法人。但各国保险法对代位求偿的对象均有所限制。我国保险法对代位求偿对象的限

代位求偿权的对象限制

代位求偿权任何对保险标的的损害负有赔偿责任的第三人,都可以成为保险人代位求偿的对象。第三人既可以是自然人,也可以是法人。但各国保险法对代位求偿的对象均有所限制。我国保险法对代位求偿对象的限制体现在保险

知识大全 面向对象思想之 -- 限制对象属性的访问

  虽然Java只支持从一个父类继承但它使用接口的方式支持多重继承  接口实现了多态使得我们能够给与对象不同特性以满足不同的需要  你可以使用多态机制让完成相似功能的不同的方法拥有相同的名字但是拥有不

谈谈操作旋耕机的注意事项

旋耕机是与拖拉机配套完成耕耙作业的农业机械,正确使用和调整旋耕机,对保持其良好技术状态,确保耕作质量十分重要。一、使用时应小心机组起步时,应先接合动力输出轴动力,再挂上工作挡,缓缓接合离合器,同时操纵

谈谈操作旋耕机的注意事项

旋耕机是与拖拉机配套完成耕耙作业的农业机械,正确使用和调整旋耕机,对保持其良好技术状态,确保耕作质量十分重要。一、使用时应小心机组起步时,应先接合动力输出轴动力,再挂上工作挡,缓缓接合离合器,同时操纵

谈谈秸秆粉碎还田机操作的注意事项

1、作业时,应先将还田机提升至刀片离地面约20-25厘米高度时接合动力输出轴,转动1-2分钟,挂上作业档,缓慢松放离合器踏板,同时操作液压升降调节手柄,使还田机逐步降至所需要的留茬高度,随之加大油门,

谈谈秸秆粉碎还田机操作的注意事项

1、作业时,应先将还田机提升至刀片离地面约20-25厘米高度时接合动力输出轴,转动1-2分钟,挂上作业档,缓慢松放离合器踏板,同时操作液压升降调节手柄,使还田机逐步降至所需要的留茬高度,随之加大油门,

知识大全 js操作iframe的一些方法介绍

  获得iframe的window对象存在跨域访问限制  chromeiframeElementcontentWindowfirefoxiframeElementcontentWindowieifra

知识大全 Struts2利用stream直接输出Excel

Struts2利用stream直接输出Excel  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

河流Stream(或River)

有河道的天然水流。河流可按不同标准分类。一种是根据河床和地下水位的关系分类。河床比地下水位低的河流,常年有水,称常流河;河床比地下水位高的河流,仅仅雨后有水,称短命河。地下水位时而高于河床、时而低于河