使用 Enterprise Library 6 的异常处理应用程序块时,如何将异常的附加属性映射到自定义故障协定?
本文以与本文相同的方式描述了FaultContractPropertyMapping 。如果您有这样的错误合同:
[DataContract]
public class SalaryCalculationFault
{
[DataMember]
public Guid FaultID { get; set; }
[DataMember]
public string FaultMessage { get; set; }
}
如何添加另一个属性并将其映射到原始异常?假设我想使用新属性向客户端显示存储过程名称:
[DataMember]
public string StoredProcedureName { get; set; }
我尝试编辑“Microsoft Enterprise Library-Preview.pdf 开发人员指南”第 90 页上显示的映射,该映射可以在此处找到,但它似乎不起作用。我的新映射如下所示:
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 映射到我的错误异常中的新属性?