2011-02-28 163 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