本文的客戶端應用程序不包括 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(".") + "http://" + 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 文件塊存入服務器端相應文件的相應字節位置! 建議客戶端異步調用")]