• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >ASP.NET > asp.net下实现支持文件分块多点异步上传的 Web Services

asp.net下实现支持文件分块多点异步上传的 Web Services

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-11

通过本文主要向大家介绍了iis支持asp.net,asp.net,asp net培训,asp和asp.net的区别,零基础学asp.net等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
本文的客户端应用程序不包括 ASP.Net Web 应用程序!

本文假设 URL: http://localhost/mywebservices/updownload.asmx

共有 4 个程序文件 (Web.Config 就不赘述了)

Server Side: 

标题中所提到的 "异步" 其实在服务器端的程序并没有什么特殊的,而主要是通过客户端应用程序
异步调用相关 Web Method 实现的!

1. updownload.asmx ,位于 IIS 的某个 Web 共享目录,代码如下,只有一句话:

<%@ WebService Language="c#" Codebehind="UpDownLoad.asmx.cs" Class="Service1" %>

2. updownload.asmx.cs ,即: updownload.asmx 的 Codebehind ,位于 IIS 的某个 Web 共享目录的 bin 子目录下,代码如下:

/*

本文件位于 Web 共享目录的 bin 子目录下,通过执行如下命令行编译:
csc /t:library updownload.asmx.cs

*/
using System.Diagnostics;
using System.Web;
using System.Web.Services;
using System.IO;
using System;

public class Service1 : System.Web.Services.WebService
{
 [WebMethod]
 public string HelloWorld()
 {
  return "Hello World";
 }

 //从 Web Method 本身,其实看不出 "同步" 还是 "异步"
 [WebMethod(Description = "为了支持多点分块异步上传文件,此方法必须由客户端预先调用,以便在服务器端生成指定 FileName 和 Length 大小的空白文件预定空间! 建议客户端同步调用")]
 public string CreateBlankFile(string FileName,int Length) //建议由客户端同步调用
 {
  FileStream fs = new FileStream(Server.MapPath(".") + "\\" + FileName, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None);
  fs.Write(new byte[Length], 0, Length);
  fs.Close();
  fs = null;
  return FileName + " (" + Length + ") 空白文件已经创建!";
 }

 [WebMethod(Description = "提供一个用于一次完整上传整个文件的方法! 建议客户端同步调用")]
 public string UploadFileBytes(byte[] Bytes,string FileName)
 {
  return UploadFileChunkBytes(Bytes, 0, FileName);
 }

 [WebMethod(Description = "提供一个用于一次只上传由 Position 位置起始的, Bytes 字节的 FileName 文件块存入服务器端相应文件的相应字节位置! 建议客户端异步调用")]
 // 这里只要多提供一个 Position 参数,余下的再由客户端调用异步的该方法,就轻松达到目的了!
 public string UploadFileChunkBytes(byte[] Bytes,int Position,string FileName)
 {
  try
  {
   FileStream fs = new FileStream(Server.MapPath(".") + "\\" + FileName, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite);
   //该 Bytes 的字节要写到 服务器端 相应文件的从 Position 开始的字节
   fs.Position = Position;
   fs.Write(Bytes, 0, Bytes.Length);
   fs.Close();
   fs = null;
   return FileName + " 文件块: 位置[" + Position + "," + (Position + Bytes.Length) + "] 大小(" + Bytes.Length + ") 上传成功!";
  }
  catch (Exception e)
  {
   return e.Message;
  }
 }

 [WebMethod]
 public byte[] DownloadFileBytes(string FileName)
 {
  if (File.Exists(FileName))
  {
   try
   {
    FileStream fs = File.OpenRead(FileName);
    int i = (int) fs.Length;
    byte[] ba = new byte[i];
    fs.Read(ba,0,i);
    fs.Close();
    return ba;
   }
   catch
   {
    return new byte[0];
   }
  }
  else
  {
   return new byte[0];
  }
 }
}


//=======================================================================

Client Side:
3. UpDownloadProxy.cs :
 本文件由如下命令生成
 % Visual Studio .Net 2003 安装目录下的 %\SDK\v1.1\Bin\wsdl.exe
 具体命令行如下:
 wsdl.exe /l:CS /out:UpDownloadProxy.cs http://localhost/MyWebServices/updownload.asmx?wsdl
 生成的本地的客户端代理类代码里已经为每个 Web Method 生成了可异步和同步执行的方法,例如:
    public string HelloWorld() {}
    public System.IAsyncResult BeginHelloWorld(...) {}
    public string EndHelloWorld(...) {}

 下面是该命令行生成的完整的 UpDownloadProxy.cs 代码,就不修改了:
/*

通过执行如下命令行编译,生成 UpDownloadProxy.dll :
csc /t:library UpDownloadProxy.cs

*/

//------------------------------------------------------------------------------
// <autogenerated>
//     This code was generated by a tool.
//     Runtime Version: 1.1.4322.573
//
//     Changes to this file may cause incorrect behavior and will be lost if 
//     the code is regenerated.
// </autogenerated>
//------------------------------------------------------------------------------

// 
// 此源代码由 wsdl, Version=1.1.4322.573 自动生成。
// 
using System.Diagnostics;
using System.Xml.Serialization;
using System;
using System.Web.Services.Protocols;
using System.ComponentModel;
using System.Web.Services;


/// <remarks/>
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Web.Services.WebServiceBindingAttribute(Name="Service1Soap", Namespace="http://tempuri.org/")]
public class Service1 : System.Web.Services.Protocols.SoapHttpClientProtocol {

    /// <remarks/>
    public Service1() {
        this.Url = "http://localhost/MyWebServices/updownload.asmx";
    }

    /// <remarks/>
    [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/HelloWorld", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
    public string 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Asp.net SignalR支持的平台有哪些
  • asp.net 多数据库支持的思考
  • asp.net下实现支持文件分块多点异步上传的 Web Services

相关文章

  • 2017-05-11ASP.NET中实时图表的实现方法分享
  • 2017-05-11ASP.NET中实现把Json数据转换为ADO.NET DataSet对象
  • 2017-05-11详解ASP.NET页面生命周期
  • 2017-05-11关于c#连接ftp进行上传下载实现原理及代码
  • 2018-08-20.NET Core单文件发布静态编译AOT CoreRT的方法详解
  • 2018-08-20asp.net mvc webapi 实用的接口加密方法示例
  • 2017-05-11ASP.NET控件10个最有用的属性详解
  • 2017-05-11asp.net中ListBox 绑定多个选项为选中及删除实现方法
  • 2017-05-11C#通过POP3获取邮件的代码(正文和附件)
  • 2017-05-11asp.net 验证字符串是否为纯数字检测函数

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 浅谈ASP.NET的include的使用方法
    • .NET示波器控件的实例代码分析
    • Asp.Net防止刷新重复提交数据的办法
    • 安装 VS2005 SP1 有关问题的解决办法
    • C#实现上传照片到物理路径,并且将地址保存到数据库的小例子
    • asp.net实现生成静态页并添加链接的方法
    • 验证用户必选CheckBox控件与自定义验证javascript代码
    • asp.net 2.0中利用Ajax2.0实现JSON传送大量页面数据
    • 使用C#处理WebBrowser控件在不同域名中的跨域问题
    • ASP.NET中TextBox使用Ajax控件显示日期不全的问题解决方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有