服务端代码:
契约方法: 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调用中提供这个功能支持。