2011-06-10 53 views
0

我在Silverlight啓用的服務中拋出異常並將其捕獲到我的Silverlight客戶端中。我已按照手冊完成了所有工作,但仍然得到我認爲意想不到的行爲。從客戶端在WCF服務中拋出錯誤異常並在Silverlight中處理

 try 
     { 
      client.ThrowFaultExceptionCompleted += (s, args) => 
      { 
       DoCallback(args); 
      }; 

      client.ThrowFaultExceptionAsync(new ThrowFaultExceptionRequest()); 
     } 
     catch (FaultException<MyFaultException> myFex) 
     { 

     } 
     catch (FaultException fex) 
     { 

     } 

這裏

代碼是從服務

我的自定義錯誤異常類的代碼

[DataContract] 
public class MyFaultException 
{ 
    private string _reason; 
    private string _myExceptionStackTrace; 

    [DataMember] 
    public string Reason 
    { 
     get { return _reason; } 
     set { _reason = value; } 
    } 

    [DataMember] 
    public string MyExceptionStackTrace 
    { 
     get { return _myExceptionStackTrace; } 
     set { _myExceptionStackTrace = value; } 
    } 
} 

的拋出了錯誤例外服務端代碼位。出於測試目的,我從客戶端調用此方法。

[OperationContract] 
    [FaultContract(typeof(MyFaultException))] 
    public void ThrowFaultException() 
    { 
     MyFaultException mfex = new MyFaultException(); 
     mfex.Reason = "No Reason!"; 
     mfex.MyExceptionStackTrace = "Long stack trace here"; 

     System.ServiceModel.Web.WebOperationContext.Current.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.OK; 
     //throw new FaultException<MyFaultException>(mfex ,new FaultReason(new FaultReasonText("My Fault Reason Text here!")), new FaultCode("my fault code here")); 
     throw new FaultException<MyFaultException>(mfex); 
    } 

不管我扔的FaultException與單一PARAM或這三個PARAMS在註釋行我得到我的Reference.cs文件中的錯誤在Silverlight的代理類類似下面

error message in reference.cs的一個

它並沒有去任何一個catch塊..這是正常的行爲?我現在必須捕獲回調方法DoCallback(args)中的錯誤,並在該方法中檢查(args.Error == null)。爲什麼catch塊沒有被擊中?

感謝您的時間...

+0

你爲什麼評論與FaultReason參數的行?該錯誤消息需要指定該原因。 – vorrtex 2011-06-11 08:57:29

+0

我以爲它會阻止上圖中的錯誤。原因包裝在MyFaultException對象中。 – user20358 2011-06-11 10:30:08

+0

@ user20358如果您取消註釋'throw new FaultException (mfex,new FaultReason(...),那麼異常消息將會不同。嘗試執行此操作並更新有關更改信息的問題。 – vorrtex 2011-06-11 12:40:37

回答

3

找到了可能有用的東西。您需要更改Visual Studio中的調試設置。

進入工具 - >選項 - >調試 - >常規,取消選中「啓用異常助手」和「啓用僅我的代碼(僅託管)」

+0

我已經在SL項目上工作了一年多,但我會檢查你的建議並儘快報告。非常感謝。感謝你分享這個。 :) – user20358 2012-10-15 12:53:14