【问题标题】:Error Handling in WCF ServiceWCF 服务中的错误处理
【发布时间】:2011-02-28 16:02:58
【问题描述】:

以如下服务方式为例:-

[PrincipalPermission(SecurityAction.Demand, Role="BUILTIN\\Administrator")]
public string GetTest()
{
  try
  {
    return "Hello";
  }
  catch (Exception ex)
  {
    throw ex;
  }
}

当调用者不在正确的角色中时,我如何从方法中得到错误。在设计时,错误在方法行(即公共字符串 GetTest)上中断并且没有达到捕获。在运行时,它在我的 silverlight 应用程序中报告为未处理的错误(我也有 try.. catch 块)。 似乎没有地方可以捕获错误,因为它永远不会进入 try 块!

【问题讨论】:

    标签: wcf authentication principalpermission


    【解决方案1】:

    检查角色(由 WCF 运行时)方法被实际调用之前 - 而不是在方法内部!

    当您进行此调用时,您需要在调用方处理此异常。

    如果您需要检查服务代码中的某些条件,请不要使用属性装饰方法,而是使用代码中的角色提供者来检查给定条件。

    【讨论】:

    • Aaah 所以你的意思是在 proxy.GetTestAsynch() 上。我在那里没有错误处理,我目前在回调事件(proxy_GetTestCompleted(...))上有它。谢谢。我现在在家,所以我会在明天的工作中立即尝试。
    • 我试过了,但它不起作用。我仍然收到一个未处理的错误。我对服务的调用和回调事件都有 try..catch ,两者都没有捕获错误。它总是以我不想要的 App.xaml.cs 模块的 Application_UnhandledException 事件结束。这仅适用于不可预见的错误。
    【解决方案2】:

    如果您想要 WCF 服务的全局错误处理程序,您可以实现 IErrorHandler 并将其添加到自定义行为中。操作无法捕获在其 try 块之外抛出的异常。

    【讨论】:

    • 谢谢。我确实简要地看了这个,但想首先让每个方法的简单属性版本工作并理解。我喜欢先尝试用更简单(但并不总是最好)的方法以分层方式理解事物。我会试试的,也谢谢你的建议。
    猜你喜欢
    • 1970-01-01
    • 2012-05-13
    • 2017-02-28
    • 2015-01-14
    • 1970-01-01
    • 2013-07-18
    • 1970-01-01
    • 1970-01-01
    • 2012-01-29
    相关资源
    最近更新 更多