原創地址:http://www.survivalescaperooms.com/jfzhu/p/4067873.html
轉載請注明出處
前面的文章《WCF Security基本概念》介紹了WCF的security mode,簡單說Transport是transport級別上的加密,Message是message級別上的加密,參見下圖:
Transport Security

Message Security

IDemoService.cs:
using System.ServiceModel;namespace WCFDemo{ [ServiceContract(Name = "IDemoService")] public interface IDemoService { [OperationContract] [FaultContract(typeof(DivideByZeroFault))] int Divide(int numerator, int denominator); }}DemoService.cs:
using System;using System.ServiceModel;using System.ServiceModel.Activation;namespace WCFDemo{ [aspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] public class DemoService : IDemoService { public int Divide(int numerator, int denominator) { try { return numerator / denominator; } catch (DivideByZeroException ex) { DivideByZeroFault fault = new DivideByZeroFault(); fault.Error = ex.Message; fault.Detail = "Denominator cannot be ZERO!"; throw new FaultException<DivideByZeroFault>(fault); } } }}basicHttpBinding使用Message Security mode時,credential type只能為Certificate(參見《WCF Security基本概念》)

在服務器上創建服務器端證書。

屬性解析
-sr 指定的證書存儲區中的注冊表位置。
-ss 指定證書存儲的位置。
-a 指定相關的算法,可以選擇 md5 算法或者 SHA1算法
-n 指定證書的名稱。該名稱遵循X.500命名標準。簡單例子如 "CN=MyName" 格式,如果沒有指定/n開關,證書默認的名稱是"Joe's Software Emporium"。
-sky 證書鍵類型。可以設置為 exchange 或者 signature。
-pe 證書可導出
-r Self-signed Certificate
證書創建成功,下面在證書控制單元查看證書的信息


選擇Certificates –> Add





需要給IIS運行WCF Service的application Pool的帳號對這個證書私鑰的讀權限(參考《IIS ApplicationPoolIdentity》)

否則會報出以下錯誤

將服務器端的證書導出,然后導入到客戶端。
從服務器導出證書:







將導出的證書復制到客戶端,然后導入:


QQ2euiwv5z0.png" alt="image" width="4
新聞熱點
疑難解答