首页 新闻 会员 周边

[WCF]关于文件传输的一个问题

0
悬赏园豆:100 [已关闭问题]

网上的代码都是将文件的Stream流作为MessageContract的报文内容进行传输,能不能用DataContract来做呢?我的意思是设置一个对象,包含文件名称的string类型和一个包含文件流的FileStream类型,客户端将对象赋值之后调用服务端的方法保存文件。但是我发现传递给服务端的对象里面,string类型的属性值仍然在,而FileStream类型的属性值却为null?这是为什么?

hikari的主页 hikari | 初学一级 | 园豆:16
提问于:2009-11-12 16:36
< >
分享
其他回答(2)
0

你只能用Stream,MemoryStream.替换.

FileStream不支持序列化.

Launcher | 园豆:45045 (高人七级) | 2009-11-12 17:55
我都试过了。WCF里面用到Stream,好像必须只能有且只有一个stream类型的参数?
支持(0) 反对(0) hikari | 园豆:16 (初学一级) | 2009-11-13 09:16
0

你的问题我以前也和别人讨论过。WCF分布式开发步步为赢(11):WCF流处理(Streaming)机制 。后面回复讨论里有。

你可以自己定义一个数据契约,包含一个filename,一个byte[] dada.属性。也可以传递数据。也可以直接返回byte[] 数组。参考测试代码:

//Pass user with pic data
public byte[] GetBytes(string fileName)
{
//String fileName = "WaterLily.jpg";
String filePath = AppDomain.CurrentDomain.BaseDirectory + fileName;
if (File.Exists(filePath))
{
//Read file.
byte[] bFile = File.ReadAllBytes(filePath);
// codes here to deal with the stream Stream stream =
Console.WriteLine("Output data length is {0},at {1}", bFile.Length, DateTime.Now.ToLongTimeString());
return bFile;
}
else
{
Console.WriteLine("No file was found with name {0},at {1}", fileName, DateTime.Now.ToLongTimeString());
return null;
}
}

Frank Xu Lei | 园豆:1860 (小虾三级) | 2009-11-14 10:48
是的。这个我也看过了。可是实际做的时候如果文件大小超过10K,Byte数组会导致XML过长的异常,而且这个异常并非是我没有指定MaxReceivedMessageSize造成的。很奇怪
支持(0) 反对(0) hikari | 园豆:16 (初学一级) | 2009-11-19 13:24
0

用MemoryStream替换就好了。

Tom-X | 园豆:515 (小虾三级) | 2009-11-19 14:41
如果除了文件内容本身,还需要传其它的东西怎么办?比如文件名。WCF的契约中如果包含steam类型就必须有且只有一个stream参数。
支持(0) 反对(0) hikari | 园豆:16 (初学一级) | 2009-11-20 09:46
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册