用的是netTcpBinding现在的做法是在客户端用一个单独的线程来读取Stream的Position。能不能用回调方法来实现呢?
解决方案 »
- c# 访问iis7发生内存泄漏 ,在线等
- 网页里前台javascript脚本怎么调用后台C#函数
- 仍然是Windows API...
- 哎呀。。没分了。。请问用vc写的函数(封装在dll里),再拿到c#里来调用,比起用C#写的,会快一点吗?
- 错误???
- 各位高手进来看看小弟的问题,关于数据显示的
- 恳求各位高手赐教 如何才能把winAPI调出的DocumentProperties()函数传递给windows的打印机首选项
- C#编的程序是否在现有的PC上不能用?
- 怎样将datagrid中的各列的宽度平均分布,完全充满表格?
- 如何在C#中利用HTTP协议来上传文件,服务器有权限限制??
- C#键盘钩子
- HttpWebRequest Post的结果与在IE上点击POST的结果不一样,为什么?
链接里那种方式显示进度条已经会了,现在是用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();
}
}
}