在WCF服务中抛出错误异常并在Silverlight中处理

问题描述:

我在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

找到了可能有用的东西。您需要更改Visual Studio中的调试设置。

进入工具 - >选项 - >调试 - >常规,取消选中“启用异常助手”和“启用仅我的代码(仅托管)”

+0

我已经在SL项目上工作了一年多,但我会检查你的建议并尽快报告。非常感谢。感谢你分享这个。 :) – user20358 2012-10-15 12:53:14