我在启用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文件中都会出现错误,如下所示
并且它永远不会去任何一个catch块。这是正常行为吗?我现在必须在回调方法DoCallback(args)中捕获错误,并在该方法中检查(args.Error == null)。为什么捕获区块没有被击中?
感谢您的时间......
答案 0 :(得分:3)
找到可能有用的东西。您需要在Visual Studio中更改调试设置。
转到工具 - &gt;选项 - &gt;调试 - &gt;常规并取消选中“启用例外助理”和“仅启用我的代码(仅管理)”