实战演习-用wse上传下载文件
jillzhang jillzhang@126.com
???? 這幾天,光忙著寫程序員職場了,對wse的翻譯和學習沒有太大的進展,這可不太好,畢竟咱還是靠技術混飯吃的,荒廢了技術怎么行!今天再上一盤有關wse的小菜,目的是想用wse實現大數據的傳輸。
??? 在wse框架結構中,能夠使用Message Transmission Optimization Mechanism (MTOM) 協議來傳輸大數據,這在前文的翻譯中也有提到,詳細內容可以參見WSE 3.0 文檔翻譯:WSE的新功能 中的介紹。本文就是對用MTOM傳輸大數據做一個項目示例,主要解決用web service上傳,下載文件的問題。
??? 實現本示例,需要三步:
???? 1) 創建asp.net xml web服務項目,并對其進行配置編碼?
???? 2) 創建一個web服務的客戶端應用程序,對其進行配置編碼?
???? 3) 準備好測試文件,運行客戶端程序,查看運行結果
創建asp.net xml web服務項目,并對其進行配置編碼
通過項目模板,創建一個傳統的asp.net xml web service網站工程,在解決方案資源管理中右鍵點擊該工程,選擇wse 3.0 settting,進行如下圖所示的操作
此操作可以為項目添加對Microsoft.Web.Services3的引用,為項目能使用wse 3.0框架做出第一步設置
添加引用之后,我們需要設置網絡服務能夠使用MTOM協議來進行消息傳輸,方法如下圖所示,仍通過點擊wse 3.0 settting,然后進行如下的配置
這里我們可以將Server Mode設置為always或者optional,二者的區別如下:
Optional(可選的): 不管經Wse處理的請求消息是否經過MTOM編碼,Soap響應或者Soap錯誤都是經過MTOM編碼的
Always(總是):經wse處理的請求和響應一定要是MTOM編碼的
經過這個操作,會在web.config中增加如下的配置信息:
在Service.asmx中添加代碼
Service端using?System;
using?System.Web;
using?System.Web.Services;
using?System.Web.Services.Protocols;
using?System.IO;
[WebService(Namespace?=?"http://tempuri.org/")]
[WebServiceBinding(ConformsTo?=?WsiProfiles.BasicProfile1_1)]
public?class?Service?:?System.Web.Services.WebService
{
????public?Service?()?{?
????}
????[WebMethod]
????public?byte[]?Send(string?fileName)?{
????????string?filePath?=?Path.Combine(AppDomain.CurrentDomain.BaseDirectory,?fileName);
????????if?(!File.Exists(filePath))
????????{
????????????throw?new?Exception(string.Format("文件:{0}不存在",filePath));
????????}
????????byte[]?buffer?=?File.ReadAllBytes(filePath);
????????return?buffer;
????}
????[WebMethod]
????public?bool?Receive(byte[]?buffer,string?fileName)
????{
????????string?filePath?=?Path.Combine(AppDomain.CurrentDomain.BaseDirectory,?fileName);
????????File.WriteAllBytes(filePath,?buffer);
????????return?false;
????}
}
?
創建一個console程序,名為BinaryMTOMClient,也按1中所示添加Microsoft.Web.Services3的引用,然后設置MTOM選項,如下圖所示:
將Client Mode設置為On表示客戶端允許將Soap消息進行MTOM編碼。此操作會在app.config中增加如下配置信息:
添加對上面1中創建的網絡服務的web引用,然后將Programe代碼更改如下:??
?
Client端using?System;
using?System.Collections.Generic;
using?System.Text;
using?System.IO;
namespace?BinaryMTOMClient
{
????public?class?Program:WseBase.AppBase
????{
????????localhost.ServiceWse?serviceProxy;
????????public?Program()
????????{
????????????serviceProxy?=?new?BinaryMTOMClient.localhost.ServiceWse();
????????????ConfigureProxy(serviceProxy);
????????}
????
????????static?void?Main(string[]?args)
????????{
????????????Program?p?=?new?Program();
????????????string?fileName?=?"1.txt";
????????????p.Download(fileName);
????????????fileName?=?"2.txt";
????????????p.Upload(fileName);
????????????Console.Read();
????????}
????????public?void?Download(string?fileName)
????????{
????????????try
????????????{
????????????????Console.WriteLine("開始調用網絡服務:"+serviceProxy.Url);
????????????????byte[]?buffer?=?serviceProxy.Send(fileName);
????????????????Console.WriteLine("接收到未加密的數據");
????????????????Console.WriteLine("數據長度為:"+buffer.Length.ToString());
????????????????File.WriteAllBytes(fileName,?buffer);
????????????????
????????????}
????????????catch?(Exception?ex)
????????????{
????????????????Console.WriteLine(ex.Message);???????????????
????????????}
????????}
????????public?void?Upload(string?fileName)
????????{
????????????try
????????????{
????????????????string?filePath?=?Path.Combine(AppDomain.CurrentDomain.BaseDirectory,?fileName);
????????????????if?(!File.Exists(filePath))
????????????????{
????????????????????Console.WriteLine(string.Format("文件:{0}不存在",?filePath));
????????????????????return;
????????????????}
????????????????Console.WriteLine("開始調用網絡服務:"?+?serviceProxy.Url);?????
????????????????byte[]?buffer?=?File.ReadAllBytes(filePath);
????????????????serviceProxy.Receive(buffer,?fileName);
????????????????Console.WriteLine("發送未加密的數據");
????????????????Console.WriteLine("數據長度為:"?+?buffer.Length.ToString());????????????
????????????}
????????????catch?(Exception?ex)
????????????{
????????????????Console.WriteLine(ex.Message);
????????????}
????????}
????}
}
?
在網絡服務的根目錄中,添加1.txt作為客戶端要下載的文件資源,在客戶端運行目錄中添加2.txt,作為客戶端要上傳的文件資源,按下圖所示,運行客戶端:
瀏覽網絡服務根目錄,新增了文件2.txt,而客戶端運行目錄,新增了文件1.txt,表示示例成功
示例項目:示例文件
轉載于:https://www.cnblogs.com/jillzhang/archive/2008/01/14/1038223.html
總結
以上是生活随笔為你收集整理的实战演习-用wse上传下载文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数学的列向量内积计算方法
- 下一篇: Appium下载及环境搭建