C# 处理WCF服务中的异常?
我在一个项目中调用了基于soap的服务。我使用的是故障和通信异常,因为其中两个异常主要发生在api调用中。但是,如果在soap api中发生任何其他异常而不是这两个异常,该怎么办C# 处理WCF服务中的异常?,c#,wcf,web-services,soap,soapexception,C#,Wcf,Web Services,Soap,Soapexception,我在一个项目中调用了基于soap的服务。我使用的是故障和通信异常,因为其中两个异常主要发生在api调用中。但是,如果在soap api中发生任何其他异常而不是这两个异常,该怎么办 try { //soap api } catch(FaultException ex) { } catch(CommunicationException ex) { } 后来我在互联网上读到了关于soap异常类的文章。我正在考虑更改我
try
{
//soap api
}
catch(FaultException ex)
{
}
catch(CommunicationException ex)
{
}
后来我在互联网上读到了关于soap异常类的文章。我正在考虑更改我的代码,如:
try
{
//soap api
}
catch(SoapException ex)
{
}
现在我需要知道的是,我是否使用Soap异常而不是错误和通信异常。好吗?我所需要的只是捕获soap api中发生的异常。然而,我想知道soap api是否也处理故障和通信异常,或者我必须像这样显式地定义代码
try
{
//soap api
}
catch(FaultException ex)
{
}
catch(CommunicationException ex)
{
}
catch(SoapException ex)
{
}
您永远不会看到
SoapException
。这是过时的ASMX技术的一部分
参见。如下:
WCF应用程序遇到的错误属于以下三种错误之一
小组:
- 通信错误
- 代理/通道错误
- 应用程序错误
FaultException
或FaultException
WCF中的错误处理由以下一项或多项执行:
- 直接处理抛出的异常。这仅适用于通信和代理/通道错误
- 使用过错契约
- 实现IErrorHandler接口
- 处理ServiceHost事件
如果您有时间线来创建一组从
ClientSafeException
扩展而来的定制异常,那么我会将它们分为客户端友好异常和非客户端友好异常
catch (ClientSafeException safeException)
{
response.ServiceResponse= ExceptionHandler.ProcessSafeExceptionResponse(safeException);
request.Succeeded = false;
}
catch (Exception unsafeException)
{
response.ServiceResponse= ExceptionHandler.ProcessUnsafeExceptionResponse(unsafeException);
request.Succeeded = false;
}
LogServiceResponse(request, response.ServiceResponse);
return response;
很抱歉没有提到静态
异常处理程序
类路由安全与非安全客户端异常。您的意思是说soap异常现在被禁止了吗?如果是,那么实现我的任务的最佳方法是什么?我是说,如果你坚持使用WCF,你将永远看不到。你读到的那篇关于SoapException的文章讨论的是一种过时的技术。那么新技术是什么呢?希望因为你,我可以将我的项目转移到最新的技术上?当你复制文本时,你还必须引用所有被复制的内容。你不能只在文本的底部放置一个链接,因为这样会给人一种你是作者的印象。引用必须是明确的,因为我已经编辑到上面。
catch (ClientSafeException safeException)
{
response.ServiceResponse= ExceptionHandler.ProcessSafeExceptionResponse(safeException);
request.Succeeded = false;
}
catch (Exception unsafeException)
{
response.ServiceResponse= ExceptionHandler.ProcessUnsafeExceptionResponse(unsafeException);
request.Succeeded = false;
}
LogServiceResponse(request, response.ServiceResponse);
return response;