在使用Enterprise Library 6的異常處理應用程序塊時,如何將異常的附加屬性映射到自定義錯誤協定?在企業庫6中爲WCF配置故障合同異常處理程序
This article描述了FaultContractPropertyMapping的相同方法this one does。如果您有這樣的錯誤合同:
[DataContract]
public class SalaryCalculationFault
{
[DataMember]
public Guid FaultID { get; set; }
[DataMember]
public string FaultMessage { get; set; }
}
如何添加另一個屬性並將其映射到原始異常?比方說,我想用一個新的屬性,以顯示存儲過程的名稱到客戶端:
[DataMember]
public string StoredProcedureName { get; set; }
我嘗試編輯的第90頁上顯示「開發人員指南,以微軟企業庫,Preview.pdf」 which can be found here的映射,但它似乎沒有工作。我的新映射如下所示:
var mappings = new NameValueCollection();
mappings.Add("FaultID", "{Guid}");
mappings.Add("FaultMessage", "{Message}");
mappings.Add("StoredProcedureName", "{Procedure}"); //SqlException has a Procedure property
這裏是政策。
var testPolicy = new List<ExceptionPolicyEntry>
{
{
new ExceptionPolicyEntry(typeof(SqlException),
PostHandlingAction.ThrowNewException,
new IExceptionHandler[]
{
new FaultContractExceptionHandler(typeof(SalaryCalculationFault), mappings)
})
}
};
var policies = new List<ExceptionPolicyDefinition>();
policies.Add(new ExceptionPolicyDefinition(
"TestPolicy", testPolicy));
exManager = new ExceptionManager(policies);
ExceptionPolicy.Reset();
ExceptionPolicy.SetExceptionManager(exManager);
當我這樣做並捕獲客戶端上的FaultException並檢查它時,StoredProcedureName始終爲空。爲什麼它不是從SqlException映射到我的錯誤異常中的新屬性?
也許我錯過了一些東西,但是您會將StoredProcedureName添加到您的故障合同中。 – 2013-05-08 21:45:26
是的,我的OP顯示我添加了一個公共字符串StoredProcedureName DataMember到DataContract。 – BBauer42 2013-05-09 01:28:05