当前位置: 代码迷 >> .NET新技术 >> WCF对Stream的操作有关问题:WCF服务可以传输Stream对象的集合吗?如List<Stream>
  详细解决方案

WCF对Stream的操作有关问题:WCF服务可以传输Stream对象的集合吗?如List<Stream>

热度:431   发布时间:2016-04-25 01:24:50.0
WCF对Stream的操作问题:WCF服务可以传输Stream对象的集合吗?如List<Stream>
服务端代码:
  契约方法: ServiceResult GetFiles(ServiceRequest result);
  自定义数据类型 :
     [MessageContract]
     public Class ServiceRequest{
        [MessageHeader]
        public string FileName{get;set;}
        [MessageBodyMember]
        public List<Stream> FileStreams{get;set;}
     }

     [MessageContract]
     public Class ServiceResult {
       [MessageHeader]
       public string FileName{get;set;}
       [MessageBodyMember]
       public Stream FileByteStreams{get;set;}
    }

在客户端调用GetFiles方法时抛出CommunicationException异常,
而且在服务器端的log日志也没有输出。

当我把public List<Stream> FileStreams{get;set;}改为public Stream FileStreams{get;set;}时就可以测试通过。
这是为什么呢,是不是WCF不支持List<Stream> 这种参数吗?

望各位高手们帮帮忙啊。。。。


------解决思路----------------------
传List集合应该不行,你可以把List<Stream>序列化成一个Stream传回去,然后再进行一次反序列化成List<Stream>试试。
------解决思路----------------------
因为Stream是经过包装的,你应该能注意到你不能直接使用FileStream,WCF对于Stream的实现只能以补丁的形式存在。
List<Stream>理论上是可行的,但是也需要包装,又需要一个新的补丁;而且这种补丁是没完没了的,比如你可能又需要支持某个实例的成员。
当然也有一次性的解决方案,那样就需要为任意序列化操作绑定WCF连接,不过微软并没有这样做。

谢谢你能提出这个需求,有时间的话我会在fastCSharp的TCP调用中提供这个功能支持。
  相关解决方案