【发布时间】:2012-04-23 13:53:56
【问题描述】:
我创建了一个接受二进制上传的自托管 .NET 服务。
[ServiceContract]
public interface IBinaryService
{
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "up/file/{fileName}/{hash}")]
void FileUpload(string fileName, string hash, Stream fileStream);
当它接收到一个文件时,它首先检查该文件是否已经在系统上,否则它会从客户端流式传输文件并保存它:
public void FileUpload(string fileName, string hash, Stream fileStream)
{
string filebasedir = basedir + @"file\"; //"
if (File.Exists(filebasedir + hash))
{
WebOperationContext.Current.OutgoingResponse.StatusCode =
System.Net.HttpStatusCode.Conflict;
return;
}
using(var fileToupload = new FileStream(
string.Concat(filebasedir, hash),
FileMode.Create))
{
fileStream.CopyTo(fileToupload);
}
如果我单步执行代码,我可以看到文件内容在服务器读取参数并确定是否存在冲突之后才会流式传输。我只需要以某种方式强制服务器不读取全部内容(可能是很多兆字节)。不幸的是,使用“return”提前退出该方法并不会这样做。
这可能吗?
【问题讨论】:
-
您是否尝试过在返回
fileStream.Close();之前关闭流? -
谢谢。刚试了一下。不工作。
-
这个流,我的意思是 fileStream 参数不应该手动关闭,WCF REST 基础设施会关闭它。
标签: .net wcf rest post httpwebrequest