我目前在我们的客户端程序中使用 C# .NET 服务。作为服务器设计的一部分,会抛出几个定制的异常来指示特定错误(就像在任何正常的桌面程序中一样)。
问题在于,Web 服务捕获这些错误并将它们序列化为FaultException,并将实际异常(如NoRoomsAvailableException)写入Message 字段。
我的问题是是否有处理这些错误的最佳实践。我们刚刚开始研究这个问题,我们可能会做一些文本模式匹配来提取异常类型和错误消息,但这似乎是一种很老套的方法,所以任何“干净”的方法都会很费力。赞赏。
正确的方法是定义故障契约。例如,在您的网络服务中,您可以执行以下操作:
[DataContract]
public class NoRoomsAvailableFaultContract
{
[DataMember]
public string Message { get; set; }
}
接下来,您为给定的服务操作声明此合同
[ServiceContract]
public interface IMyServiceContract
{
[OperationContract]
[FaultContract(typeof(NoRoomsAvailableFaultContract))]
void MyOperation();
}
你像这样实现它:
public class MyService : IMyServiceContract
{
public void MyOperation()
{
if (somethingWentWrong)
{
var faultContract = new NoRoomsAvailableFaultContract()
{
Message = "ERROR MESSAGE"
};
throw new FaultException<NoRoomsAvailableFaultContract>(faultContract);
}
}
}
在这种情况下,NoRoomsAvailableFaultContract 将在 WSDL 中公开,并且 svcutil.exe 可以生成代理类。然后你可以捕获这个异常:
try
{
myServiceProxy.MyOperation();
}
catch (FaultException<NoRoomsAvailableFaultContract> ex)
{
Console.WriteLine(ex.Message);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)