为你解决WCF异常问题

WCF还是比较常用的,于是我研究了一下WCF,在这里拿出来和大家分享一下,希望对大家有用。异常消息与特定技术有关,.NET异常同样如此,因而WCF并不支持传统的异常处理方式。如果在WCF服务中采用传统的方式处理异常,由于异常消息不能被序列化,因而客户端无法收到服务抛出的WCF异常,例如这样的服务设计:

创新互联建站主营安阳网站建设的网络公司,主营网站建设方案,成都APP应用开发,安阳h5成都微信小程序搭建,安阳网站营销推广欢迎安阳等地区企业咨询

 
 
  1. [ServiceContract(SessionModeSessionMode = SessionMode.Allowed)] 
  2. public interface IDocumentsExplorerService 
  3. [OperationContract] 
  4. DocumentList FetchDocuments(string homeDir); 
  5. [ServiceBehavior(InstanceContextModeInstanceContextMode=InstanceContextMode.Single)] 
  6. public class DocumentsExplorerService : IDocumentsExplorerService,IDisposable 
  7. public DocumentList FetchDocuments(string homeDir) 
  8. //Some Codes 
  9. if (Directory.Exists(homeDir)) 
  10. //Fetch documents according to homedir 
  11. else 
  12. throw new DirectoryNotFoundException( 
  13. string.Format("Directory {0} is not found.",homeDir)); 
  14. public void Dispose() 
  15. Console.WriteLine("The service had been disposed."); 

则客户端在调用如上的服务操作时,如果采用如下的捕获方式是无法获取该WCF异常的:

 
 
  1. catch (DirectoryNotFoundException ex) 
  2. //handle the exception; 

为了弥补这一缺陷,WCF会将无法识别的异常均当作为FaultException异常对象,因此,客户端可以捕获FaultException或者Exception异常:

 
 
  1. catch (FaultException ex) 
  2. //handle the exception; 
  3. catch (Exception ex) 
  4. //handle the exception; 

#T#然而,这样捕获的WCF异常,却无法识别DirectoryNotFoundException所传递的错误信息。尤为严重的是这样的异常处理方式还会导致传递消息的通道出现错误,当客户端继续调用该服务代理对象的服务操作时,会获得一个CommunicationObjectFaultedException 异常,无法继续使用服务。如果服务被设置为PerSession模式或者Single模式,异常还会导致服务对象被释放,终止服务。

 
 
  1. [ServiceContract(SessionModeSessionMode = SessionMode.Allowed)] 
  2. public interface IDocumentsExplorerService 
  3. [OperationContract] 
  4. [FaultContract(typeof(DirectoryNotFoundException))] 
  5. DocumentList FetchDocuments(string homeDir); 

网站标题:为你解决WCF异常问题
URL标题:http://www.mswzjz.com/qtweb/news10/163610.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联