【问题标题】:throwing exception from WCF从 WCF 抛出异常
【发布时间】:2011-07-17 05:46:08
【问题描述】:


我试图从 WCF 模块向客户端模块抛出异常。我收到以下错误“用户未处理FaultException”

服务端

public IList<UserEntity> SearchUserDetail(string userName)
{
    try
    {
        int y = 0;
        int u = 9 / y;
        return new UserViewModel().SearchUserDetail(userName);
    }
    catch (Exception ex)
    {
        throw new FaultException(
        new FaultReason(ex.Message),new FaultCode("Data Access Error"));
    }                 
}

在客户端

try
{             
    ServiceReference.ServiceClient servRef = new ServiceReference.ServiceClient();

    List<UserEntity> users = new List<UserEntity>();
    users.AddRange(servRef.SearchUserDetail("Jacson"));
    dataGridView1.DataSource = users;            
}
catch (System.ServiceModel.FaultException  exc)
{
    Logging.Log(new Exception("Search User", exc));
}

在Service模块的app.config中我添加了如下属性

 serviceDebug includeExceptionDetailInFaults="True" 

有人知道解决办法吗?

【问题讨论】:

  • 在服务端代码 - 除非您正在记录数据(我看不到您在记录数据),否则这种异常重新抛出将导致您的应用程序变得更难调试。您基本上是在丢弃堆栈跟踪。不要那样做。或者,如果您这样做,请先登录。

标签: c# .net wcf exception


【解决方案1】:

您必须将 FaultContractAttribute 添加到方法 SearchUserDetail,如果它具有 OperationContractAttribute 并且是您的 ServiceContract 类的一部分。

[ServiceContract]
interface IMyServiceContract
{
  [OperationContract]
  [FaultContract(typeof(...)]
  IList<UserEntity> SearchUserDetail(string userName)
}

我不确定 FaultContract 的类型。但是看看msdn。

【讨论】:

    【解决方案2】:

    【讨论】:

      【解决方案3】:

      我知道我来晚了,但以防万一有人偶然发现这一点,我遇到了同样的错误,我的代码一切正常。

      事实证明,由于某些调试选项,这只发生在 Visual Studio 环境中。请参阅here 了解说明。

      【讨论】:

        猜你喜欢
        • 2012-01-24
        • 1970-01-01
        • 2011-08-29
        • 1970-01-01
        • 2012-04-30
        • 2011-04-07
        • 2013-05-24
        • 1970-01-01
        • 2017-11-08
        相关资源
        最近更新 更多