【问题标题】:throwing Fault Exceptions in WCF service and handling in Silverlight在 WCF 服务中抛出错误异常并在 Silverlight 中处理
【发布时间】:2011-09-12 20:02:40
【问题描述】:

我在启用 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)。为什么catch块没有被击中?

感谢您的宝贵时间...

【问题讨论】:

  • 您为什么用 FaultReason 参数注释了该行?错误消息需要说明原因。
  • 我认为它会阻止上图中的错误。原因封装在 MyFaultException 对象中。
  • @user20358 如果取消注释 throw new FaultException&lt;MyFaultException&gt;(mfex ,new FaultReason(... 行,异常消息将有所不同。尝试这样做并使用有关更改的信息更新您的问题。
  • 问题是我的reference.cs文件中也出现了这个错误。我只想在 silverlight 客户端中得到这个错误。如果我取消注释该行,我会得到“我的错误原因文本在这里!”代替“此故障的创建者未指定原因”。由于这是一个研究项目,我现在不关心信息。我只关心它出现在我的参考文件中。我不希望服务在部署后爆炸。
  • @user20358 好的,我已经测试了你的代码。在我的情况下,此消息出现在服务端和文件 Reference.cs 中。但是异常由自动生成的代码处理,并且可以从回调事件参数中访问。所以这是正常行为,只使用检查操作,您可以从客户端代码中删除 try-catch 块。

标签: silverlight wcf exception-handling


【解决方案1】:

发现了一些可能有用的东西。您需要在 Visual Studio 中更改调试设置。

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

【讨论】:

  • 我从事 SL 项目已经一年多了,但我会查看您的建议并在有时间时尽快报告。非常感谢。感谢你分享这个。 :)
猜你喜欢
  • 2011-04-07
  • 1970-01-01
  • 2011-10-13
  • 1970-01-01
  • 1970-01-01
  • 2011-04-07
  • 1970-01-01
  • 2018-05-26
  • 1970-01-01
相关资源
最近更新 更多