阅读Web服务和wcf服务和异常,您需要抛出soap / wcf标准异常,例如FaultException或SoapException.因此,对于wcf服务,您需要将每个方法包装在try catch中,捕获每个异常,将其包装在FaultException中并抛出它.至少这是我的理解,如果我错了,请纠正我.
所以我创建了我的设计模式:
[ServiceContract(namespace = "http://MyTest")][AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]public class DataAccess{ /// <summary> /// Error class,handle converting an exception into a FaultException /// </summary> [DataContractAttribute] public class Error { private string strMessage_m; private string strStackTrace_m; public Error(Exception ex) { this.strMessage_m = ex.Message; this.strStackTrace_m = ex.StackTrace; } [DataMemberAttribute] public string Message { get { return this.strMessage_m; } set { this.strMessage_m = value; } } [DataMemberAttribute] public string StackTrace { get { return this.strStackTrace_m; } set { this.strStackTrace_m = value; } } //Convert an exception into a FaultException public static voID Throw(Exception ex) { if (ex is FaultException) { throw ex; } else { throw new FaultException<Error>(new Error(ex)); } } } [OperationContract] [FaultContract(typeof(Error))] public voID TestException() { try { throw new Exception("test"); } catch (Exception ex) { Error.Throw(ex); } }}
所以长话短说,我仍然没有在我的silverlight应用程序中得到正确的错误.我检查AsyncCompletedEventArgs.Error对象,它仍然包含一个带有一般错误的CommunicationException对象.帮助我想出一个漂亮的简单设计模式,让我轻松地从服务中抛出正确的异常,并轻松地在应用程序中捕获它.
解决方法 我建议你集中管理WCF服务的错误,而不是在每个方法上放置try / catch.为此,您可以实现 IErrorHandler接口:public class ErrorHandler : IErrorHandler{ public bool HandleError(Exception error) { return true; } public voID ProvIDeFault(Exception error,MessageVersion version,ref Message msg) { DataAccessFaultContract dafc = new DataAccessFaultContract(error.Message); var fe = new FaultException<DataAccessFaultContract>(dafc); Message fault = fe.CreateMessageFault(); string ns = "http://www.example.com/services/FaultContracts/DataAccessFault"; msg = Message.CreateMessage(version,fault,ns); }}
只要您的一个OperationContract引发异常,就会调用ProvIDeFault方法.它会将异常转换为自定义的FaultContract并将其发送到客户端.这样您就不再需要在每个方法中放置try / catch.您还可以根据抛出的异常发送不同的FaultContract.
在客户端,您需要捕获FaultException< DataAccessFaultContract>每次在Web服务上调用方法时.
总结以上是内存溢出为你收集整理的.Net WFC / Web服务异常处理设计模式全部内容,希望文章能够帮你解决.Net WFC / Web服务异常处理设计模式所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)