首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

WSE 3.0 構建 Web 服務安全(四):MTOM 傳輸優化與大文件上傳下載

     編輯:關於.NET

前言

MTOM (Message Transmission Optimization Mechanism) 專為大數據傳輸設計,實測效率提升 ~33%。本文解析原理、WSE 3.0 配置、代碼實現與適用場景。

一、核心概念

1. Base64 編碼開銷

3 位元組 → 4 字符(+33% 體積)。SOAP 預設用 Base64 編碼二進制數據,大文件傳輸效率極低。

2. MIME 多部分封裝

MTOM 將大型二進制元素外部化,以原始二進制形式置於 MIME 多部分訊息中,SOAP 僅保留引用(xop:Include),XML 部分仍用 Base64。

3. MTOM 優勢門檻

僅當二進制元素 > ~1KB 時體現優勢;小數據反因 MIME 封裝開銷變慢。

二、WSE 3.0 工具配置 MTOM

服務端策略

服務端 MTOM 配置
  • clientMode="On":要求客戶端使用 MTOM
  • serverMode="Optional":服務端視數據大小決定是否啟用(推薦)
  • maxMessageSize="64":最大附件數

生成配置:

<messaging>
  <mtom serverMode="optional" clientMode="On" />
</messaging>

客戶端策略

客戶端 MTOM 配置
<messaging>
  <mtom clientMode="On" serverMode="optional" />
</messaging>

三、代碼實現:圖片上傳下載

1. 非安全服務

[WebService(Namespace = "https://www.cnblogs.com/frank_xl/")]
public class WSE3MTOMService : WebService {
    [WebMethod]
    public byte[] DownLoadFile(string fileName) {
        string path = AppDomain.CurrentDomain.BaseDirectory + @"App_Data\" + fileName;
        return File.ReadAllBytes(path);
    }
    [WebMethod]
    public void UpLoadFile(byte[] file) {
        string path = AppDomain.CurrentDomain.BaseDirectory + @"App_Data\FrankXuLei.gif";
        if (File.Exists(path)) File.Delete(path);
        File.WriteAllBytes(path, file);
    }
}

2. 安全服務(簽名加密)

[Policy("ServerPolicy")]
public class WSE3MTOMSecureService : WebService {
    [WebMethod]
    public byte[] DownLoadFileWithSecurity(string fileName) {
        string path = AppDomain.CurrentDomain.BaseDirectory + @"App_Data\" + fileName;
        return File.ReadAllBytes(path);
    }
}

[Policy("ServerPolicy")] 引用 wse3policyCache.config 中的安全策略(X509 證書加密)。

3. 客戶端調用

// 非安全下載
public void DownLoadFile(string fileName) {
    var proxy = new WSE3MTOMServiceWse();
    byte[] data = proxy.DownLoadFile(fileName);
    File.WriteAllBytes(fileName, data);
}

// 安全下載
public void DownLoadFileSecure(string fileName) {
    var proxy = new WSE3MTOMSecureServiceWse();
    proxy.SetPolicy("ClientPolicy"); // 對應客戶端策略
    byte[] data = proxy.DownLoadFileWithSecurity(fileName);
    File.WriteAllBytes("Secure_" + fileName, data);
}

// 上傳
public void UpLoadFile(string fileName) {
    var proxy = new WSE3MTOMServiceWse();
    byte[] data = File.ReadAllBytes(fileName);
    proxy.UpLoadFile(data);
}

四、總結

項目結論
效率提升~33%(避免 Base64 編碼/解碼,減小訊息體積)
適用場景大文件(文檔、圖片)、大量二進制負載
缺陷小二進制負載顯著增加開銷
安全整合可結合 WS-Security 簽名加密

本系列下一階段進入 WCF 分布式開發學習,敬請關注。本文附完整源碼。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved