【问题标题】:Configuring Fault Contract Exception Handlers in Enterprise Library 6 for WCF在 Enterprise Library 6 中为 WCF 配置故障契约异常处理程序
【发布时间】:2013-05-03 03:37:58
【问题描述】:

在使用 Enterprise Library 6 的异常处理应用程序块时,如何将异常的附加属性映射到自定义故障协定?

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; }

我尝试编辑“Microsoft Enterprise Library-Preview.pdf 开发人员指南”which can be found here 第 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 映射到我的错误异常中的新属性?

【问题讨论】:

  • 也许我遗漏了一些东西,但您会将 StoredProcedureName 添加到您的故障合同中。
  • 是的,我的 OP 显示我向 DataContract 添加了一个公共字符串 StoredProcedureName DataMember。

标签: wcf exception-handling enterprise-library


【解决方案1】:

事实证明,您实际上不应该将您期望异常的代码放在 ExceptionManager.Processs() 方法中。我以前这样做过:

exManager.Process(() => wimDAL.Execute_NonQueryNoReturn(sc), "TestPolicy");

Insead,正常执行代码即可。

wimDAL.Execute_NonQueryNoReturn(sc);

这不符合“Microsoft Enterprise Library-Preview.pdf 开发人员指南”的内容,但我猜该文档仍在进行中。我希望这对其他人有帮助。

【讨论】:

    猜你喜欢
    • 2013-05-02
    • 2011-05-25
    • 1970-01-01
    • 1970-01-01
    • 2013-11-08
    • 2016-01-04
    • 1970-01-01
    • 1970-01-01
    • 2013-06-08
    相关资源
    最近更新 更多