繁体   English   中英

使用流消息在WCF服务的流字段中检测EndOfStream(Mtom)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM