使用简单的wcf文件实现上传,下载文件到服务器

本文介绍了如何利用WCF服务契约实现文件在服务器上的上传和下载操作。通过VS2012创建服务端和客户端,配置基本HttpBinding,设置契约,并在IIS上部署服务。客户端通过OpenFileDialog选择文件,使用多线程上传和下载,最大支持2GB文件。注意文件名不能包含WCF无法解析的特殊字符,否则会导致404错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    wcf是微软开发出的用户数据通信的app接口,在.net framework3.0中与wpf,wf一同集成,是.net框架的一部分。

具体请参见点击打开链接

   本文主要讲述了使用wcf服务契约来进行文件或者数据的服务器上传或者下载工作,使用的工具为vs2012(使用过程中发现了不少bug)。WCF是以契约来规定通信双方的沟通协议。双方必须定义相同的协议绑定才能实现沟通。本文使用基本的http支持,也就是basicHttpBinding。看具体步骤

1:搭建服务器,添加ServiceFile.svc文件


添加成功后,会在项目中增加一个该服务类对应的一个接口,IServiceFile,这个接口中定义的未实现方法就是将来要实现的服务代码,也是契约的定义声明,这里使用操作契约。

定义的接口代码:

 // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的接口名“IServiceFile”。
    [ServiceContract]
    public interface IServiceFile
    {
        /// <summary>
        /// 上传操作
        /// </summary>
        /// <param name="fileInfo"></param>
        /// <returns></returns>
        [OperationContract]
        CustomFileInfo UpLoadFileInfo(CustomFileInfo fileInfo);

        /// <summary>
        /// 获取文件操作
        /// </summary>
        /// <param name="fileName"></param>
        /// <returns></returns>
        [OperationContract]
        CustomFileInfo GetFileInfo(string fileName);
    }

    /// <summary>
    /// 自定义文件属性类
    /// </summary>
    [DataContract]
    public class CustomFileInfo
    {
        /// <summary>
        /// 文件名称
        /// </summary>
        [DataMember]
        public string Name { get; set; }

        /// <summary>
        /// 文件大小
        /// </summary>
        [DataMember]
        public long Length { get; set; }

        /// <summary>
        /// 文件偏移量
        /// </summary>
        [DataMember]
        public long OffSet { get; set; }

        /// <summary>
        /// 发送的字节
        /// </summary>
        [DataMember]
        public byte[] SendByte { get; set; }
    }

ServiceInfo.svc实现:

// 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码、svc 和配置文件中的类名“ServiceFile”。
    // 注意: 为了启动 WCF 测试客户端以测试此服务,请在解决方案资源管理器中选择 ServiceFile.svc 或 ServiceFile.svc.cs,然后开始调试。
    public class ServiceFile : IServiceFile
    {
        public CustomFileInfo UpLoadFileInfo(CustomFileInfo fileInfo)
        {
            // 获取服务器文件上传路径
            string fileUpLoadPath = System.Web.Hosting.HostingEnvironment.MapPath("~/UpLoadFile/");
            // 如需指定新的文件夹,需要进行创建操作。
            Console.WriteLine("1");
            // 创建FileStream对象
            FileStream fs = new FileStream(fileUpLoadPath + fileInfo.Name, FileMode.OpenOrCreate);
            Console.WriteLine("2");

            long offSet = fileInfo.OffSet;
            // 使用提供的流创建BinaryWriter对象
            var binaryWriter = new BinaryWriter(fs, Encoding.UTF8);

            binaryWriter.Seek((int)offSet, SeekOrigin.Begin);
            binaryWriter.Write(fileInfo.SendByte);
            fileInfo.OffSet = fs.Length;
            fileInfo.SendByte = null;

            binaryWriter.Close();
            fs.Close();
            Console.WriteLine("2");
            return fileInfo;
        }

        public CustomFileInfo GetFileInfo(string fileName)
        {
            string filePath = System.Web.Hosting.HostingEnvironment.MapPath("~/UpLoadFile/") + fileName;
            if (File.Exists(filePath))
            {
                var fs = new FileStream(filePath, FileMode.OpenOrCreate);
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值