从 WCF 抛出异常
Posted
技术标签:
【中文标题】从 WCF 抛出异常【英文标题】:throwing exception from 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"
有人知道解决办法吗?
【问题讨论】:
在服务端代码 - 除非您正在记录数据(我看不到您在记录数据),否则这种异常重新抛出将导致您的应用程序变得更难调试。您基本上是在丢弃堆栈跟踪。不要那样做。或者,如果您这样做,请先登录。 【参考方案1】:您必须将 FaultContractAttribute 添加到方法 SearchUserDetail
,如果它具有 OperationContractAttribute 并且是您的 ServiceContract 类的一部分。
[ServiceContract]
interface IMyServiceContract
[OperationContract]
[FaultContract(typeof(...)]
IList<UserEntity> SearchUserDetail(string userName)
我不确定 FaultContract 的类型。但是看看msdn。
【讨论】:
【参考方案2】:无耻的塞:
First part of the explanation Second part【讨论】:
【参考方案3】:我知道我来晚了,但以防万一有人偶然发现这一点,我遇到了同样的错误,我的代码一切正常。
事实证明,由于某些调试选项,这只发生在 Visual Studio 环境中。请参阅here 了解说明。
【讨论】:
以上是关于从 WCF 抛出异常的主要内容,如果未能解决你的问题,请参考以下文章
在IIS上抛出异常的WCF托管(没有权限和HTTP错误404.3 - 未找到)
在WCF中,自定义Authentication,Validate方法,抛出错误异常时如何在不停止服务的情况下处理异常?
WCF - 抛出许多许多第一次机会异常 - 然后使应用程序崩溃