【问题标题】:WCF Client not able to see Custom Fault ExceptionWCF 客户端无法看到自定义故障异常
【发布时间】:2014-12-22 23:31:42
【问题描述】:

您可能从问题标题中可以看出我是 WCF 的新手。我已经实现了这个 Web 服务,其中一个方法抛出了一个自定义的 FaultException。

namespace Feed
{
    [ServiceContract]
    public interface IMyClass
    {
        [OperationContract]
        [FaultContract(typeof(CustomError))]
        DataSet MyMethod(int A, int T);
    }
    [DataContract]
    public class CustomError
    {
        public CustomError(string msg, int code, int id)
        {
            Id = id;
            ErrorMessage = msg;
            ErrorCode = code;
        }
        [DataMember]
        [DataMember]
        public string ErrorMessage
        {
            get;
            set;
        }

        [DataMember]
        public int ErrorCode
        {
            get;
            set;
        }

        [DataMember]
        public int Id
        {
            get;
            set;
        }
    }
}

然后,我在 MyMethod 的实现中抛出适当的异常

namespace Feeds
{
    public class MyClass : IMyClass
    {
        DataSet MyMethod(int A, int T)
        {
            try
            {
                //todo
                DataSet ds = new DataSet();
                return ds;
            }
            catch (Exception ex)
            {
                throw new FaultException<CustomError>(new CustomError("a", 1, 0));
            }
        }
    }
}

到目前为止一切顺利。现在,我创建了一个使用此 Web 服务的简单 ASP.NET 网站。我在该网站中为 MyClass.svc Web 服务添加了一个 WebReference。问题是当我试图捕捉异常时: 捕捉(故障异常前) { } 它无法识别 CustomError。我已经完成了以下故障排除: 1.确保我更新了wsdl(做了很多次,尝试改变其他东西,一切都反映在客户端) 2. 尝试了 BasicHttpBinding 和 wsHttpBinding(不确定这是否有所不同) 3. 用谷歌搜索了很多,并虔诚地遵循了 MSDN 的示例代码。

仍然没有运气!我错过了什么吗?任何建议将不胜感激。

【问题讨论】:

  • 您可以在配置文件中设置[returnUnknownExceptionsAsFaults]属性为true来获取故障详情。

标签: c# asp.net web-services wcf faultexception


【解决方案1】:

找出问题所在。
我的 ASP.NET 网站在 .NET Framework 2.0 上(这是 VS 2010 默认所做的),我通过右键单击项目并选择“添加 Web 引用..”来添加对 Web 服务的引用。
但是,我需要做什么,选择“添加服务引用..”以将 Web 服务添加为服务引用。由于 .NET 2.0 不支持服务引用,我不得不将我的 .NET 框架升级到 3.5,添加服务引用,一切都很顺利! This post 点亮了我心中的灯泡。感谢大家为此付出的所有努力。

【讨论】:

    【解决方案2】:
    [FaultContract(typeof(CustomError))]
    
    MyMethod();
    

    【讨论】:

    • 嗨,Edis,这不会编译。它说“必须有一个返回类型”
    • 你的方法必须返回DataSet的类型。
    • 不确定我在这里缺少什么。我在上面发布的代码、接口以及实现中返回 DataSet。
    • 您的方法必须返回 DataSet 类的新实例。我在你的方法中没有看到返回值。
    • 更新了我的代码。但这不是问题的原因。
    猜你喜欢
    • 1970-01-01
    • 2018-06-22
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 2023-03-19
    相关资源
    最近更新 更多