如何从wcf中获得业务异常
本文关键字:业务 异常 wcf | 更新日期: 2023-09-27 18:12:50
如何测试从WCF调用返回的此异常?
我有这个错误类。
[Serializable]
public class PermissionDenied_Error : Exception
{
public PermissionDenied_Error() : base("You are not approved.") { }
}
In my Service, I ' m throw it.
if (notApproved)
{
throw new FaultException<PermissionDenied_Error>(new PermissionDenied_Error()
, new FaultReason("Permissions Denied!"));
}
在我的测试中,我期待它。
[Test]
[ExpectedException(typeof(FaultException<PermissionDenied_Error>))]
当前结果为:
Expected: System.ServiceModel.FaultException`1[[PermissionDenied_Error
, Project.API, Version=1.0.4318.24332, Culture=neutral, PublicKeyToken=null]]
but was: System.ServiceModel.FaultException : Permissions Denied!
您的PermissionDenied_Error
应该是一个数据合同。它不应该从Exception派生。
同样,您需要将FaultContractAttribute
放在您的操作契约上,以便客户端知道会发生异常。
Valamas添加
public interface IAccess
{
[OperationContract]
[FaultContract(typeof(PermissionDenied_Error))]
DtoResponse Access(DtoRequest request);
}
在WCF中根本不是这样工作的。
有关于如何设置和使用FaultExceptions
的文章
检查这一步一步在这里:异常处理在Windows通信框架和最佳实践
使用ExpectedException属性是一种不好的做法。而不是使用这个:
[Test]
[ExpectedException(typeof(FaultException<PermissionDenied_Error>))]
尝试:
[Test]
public void Test1()
{
.....
try{
WfcServiceCall(...);
Assert.Fail("a FaultException<PermissionDenied_Error> was expected!");
}catch(FaultException<PermissionDenied_Error>){
Assert.Sucess();
}catch(Exception e){
Assert.Fail("Unexpected exception!")
}
}