在WCF服务中抛出Fault Exceptions并在Silverlight中处理

时间:2011-06-10 21:49:09

标签: silverlight wcf exception-handling

我在启用Silverlight的服务中抛出异常,并在我的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还是在注释行中抛出这三个参数,我在Silverlight代理类的Reference.cs文件中都会出现错误,如下所示

error message in reference.cs

并且它永远不会去任何一个catch块。这是正常行为吗?我现在必须在回调方法DoCallback(args)中捕获错误,并在该方法中检查(args.Error == null)。为什么捕获区块没有被击中?

感谢您的时间......

1 个答案:

答案 0 :(得分:3)

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

转到工具 - &gt;选项 - &gt;调试 - &gt;常规并取消选中“启用例外助理”和“仅启用我的代码(仅管理)”