2011-02-28 166 views
0

用下面的服务方法例如: -错误WCF服务处理

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

我如何从方法到错误时调用方不在正确的角色。在设计时,错误在方法行中断开(即公共字符串GetTest)并且没有达到捕获。在运行时,它在我的silverlight应用程序中报告为未处理的错误(我也尝试过.. catch块)。 似乎没有一个地方来捕捉错误,因为它从来没有进入try块!

回答

3

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

当您拨打此电话时,您需要在来电方上处理此例外情况。

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

+0

Aaah所以你的意思是在proxy.GetTestAsynch()。我没有任何错误处理,我现在有回调事件(proxy_GetTestCompleted(...)。谢谢。我现在在家,所以我会在明天工作时立即尝试。 – EzaBlade 2011-02-28 21:31:46

+0

我试过了,但没有工作,我仍然得到一个未处理的错误,我尝试了......对服务和回调事件的调用,它们都没有捕获错误,它总是在App.xaml.cs模块的Application_UnhandledException事件中结束我不想要,这是为了仅仅出现无法预料的错误 – EzaBlade 2011-03-01 09:18:29

2

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

+0

谢谢,我简单地看了一下,但是希望得到每个方法的简单属性版本的工作原理和首先理解的东西,我喜欢试着用角色理解某些东西。首先更容易(但并不总是最好的)方法。我也会试着这样做,谢谢你的建议。 – EzaBlade 2011-02-28 21:32:26