《WCF 分布式必備知識》後續系列,共 5 篇:
附完整可運行源碼與詳細註釋。
WSE 3.0 = Web Services Enhancements 3.0,微軟針對 Web Service 的安全實現平台,含認證加密專用類庫。許多設計映射到後來的 WCF。
支援 WS-I Basic Profile 1.1、SOAP 1.2、XML 1.0、XSD、WSDL。
比舊 SoapExtension 更易用,可創建與內建聲明性策略結合的自定義策略。另含 SOAP 訊息診斷追蹤。
| 對稱 | 非對稱 | 雜湊 |
|---|---|---|
| DES, TripleDES, Rijndael, RC2 | DSA, RSA | MD5, SHA1/256/384/512, HMACSHA, MACTripleDES |
單鑰加解密,快,但無法實現完整性與身份驗證。.NET 類:DES、TripleDES、Rijndael、RC2。
公鑰公開、私鑰保密。公鑰加密→私鑰解密;私鑰簽名→公鑰驗證。.NET:DSACryptoServiceProvider、RSACryptoServiceProvider。
任意長度→固定長度唯一指紋。.NET:SHA*、MD5、HMACSHA、MACTripleDES。
綜合方案:雙方交換公鑰 → 生成對稱會話鑰加密訊息 → 雜湊訊息 → 對方公鑰加密「會話鑰+雜湊」作為簽名附加發送。


WseWsdl3.exe WSDL 生成WseConfigEditor3.exe 配置編輯器X509Certificate3.exe 證書管理注意:WSE 3.0 僅整合 VS2005。VS2008 內建 WCF,全面取代 WSE。
public class MyUsernameTokenManager : UsernameTokenManager {
protected override string AuthenticateToken(UsernameToken token) {
// 這裡可查資料庫、複雜業務驗證
return "123456789"; // 返回預期密碼,WSE 會與 token 內密碼比對
}
}
AuthenticateToken 為核心:WSE 反序列化 SOAP Header 獲取 UsernameToken → 調用此方法取預期密碼 → 比對驗證。
[WebService(Namespace = "https://www.cnblogs.com/frank_xl/")]
public class Service : WebService {
[WebMethod]
public string HelloWorld() => "Hello Guys, I 'm Frank Xu Lei";
}
var proxy = new ServiceWse();
var token = new UsernameToken("FrankXu", "123456789", PasswordOption.SendPlainText);
proxy.SetClientCredential(token);
// proxy.SetPolicy("ClientPolicy"); // 此處暫不啟用策略
string result = proxy.HelloWorld();
Microsoft.Web.Services3.dll本文附源碼。