[英]Detect EndOfStream in a stream field on a WCF service using streaming messages (Mtom)
我的Web方法收到一个简单的结构,其中的一个字段是流。 它是这样的:
[MessageContract]
public class MyFile:IDisposable
{
Stream _stream;
[MessageBodyMember]
public Stream stream
{
get { return _stream; }
set { _stream= value; }
}
String _Name;
[MessageHeader]
public String Name
{
get { return _Name; }
set { _Name = value; }
}
}
#region IDisposable Support
private bool disposedValue = false; // To detect redundant calls
protected virtual void Dispose(bool disposing)
{
if (!disposedValue)
{
if (disposing)
{
// TODO: dispose managed state (managed objects).
_File.Dispose();
}
// TODO: free unmanaged resources (unmanaged objects) and override a finalizer below.
// TODO: set large fields to null.
disposedValue = true;
}
}
public void submitFile(MyFile file)
{
using (var fs = File.Create(@"d:\temp\" + file + ".pdf"))
{
int len;
byte[] buffer = new byte[1024];
do
{
len = file.stream.Read(buffer,0,buffer.Length);
fs.Write(buffer, 0, len);
} while (len != 0);
}
}
此代码在客户端导致错误。 当客户端仍通过该流发送数据时,客户端中止说该流已被服务器关闭。
问题是如何检测流结束?
我知道可以暂停通信,或者服务器可以比客户端更快地处理,因此没有要读取的数据并不意味着客户端已经发送了所有数据。 Http帖子的末尾应带有一些标记,以告知服务器请求已结束,因此应该是WCF中获取该信息的一些简单方法。
我试图避免在文件末尾发送标记。
您是否尝试过使用最简单的解决方案?
file.stream.CopyTo(fs);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.