用的是netTcpBinding现在的做法是在客户端用一个单独的线程来读取Stream的Position。能不能用回调方法来实现呢?

解决方案 »

  1.   

    http://kb.cnblogs.com/a/1607823/
      

  2.   


    链接里那种方式显示进度条已经会了,现在是用Stream来传递的。
    namespace FileTransfer.Service
    {
        [MessageContract]
        public class FileStreamWrapper
        {
            [MessageHeader]
            public string FileName { get; set; }        [MessageBodyMember]
            public Stream Data { get; set; }
        }    [ServiceContract]
        public interface IFileService
        {
            [OperationContract]
            void Store(FileStreamWrapper file);
        }    public class FileService : IFileService
        {
            private static DirectoryInfo dir;
            public static DirectoryInfo FileDirectory
            {
                get
                {
                    if (dir == null)
                    {
                        dir = new DirectoryInfo(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Files"));
                        if (!dir.Exists) { dir.Create(); }
                    }
                    return dir;
                }
            }        public void Store(FileStreamWrapper file)
            {
                string path = Path.Combine(FileDirectory.FullName, file.FileName);
                FileStream fs = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.None);
                var src = file.Data;
                var buffer = new byte[4096];
                int bytesRead = 0;            while ((bytesRead = src.Read(buffer, 0, buffer.Length)) > 0)
                {
                    fs.Write(buffer, 0, bytesRead);
                    Console.WriteLine("WriteData: {0} - {1} - {2}", file.FileName, bytesRead, DateTime.Now);
                }
                fs.Close();
            }
        }
    }