我创建了一个接受二进制上传的自托管 .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”提前退出该方法并不会这样做。
这可能吗?