Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 处理wcf服务中的错误和错误参数_.net_Wcf_Exception Handling - Fatal编程技术网

.net 处理wcf服务中的错误和错误参数

.net 处理wcf服务中的错误和错误参数,.net,wcf,exception-handling,.net,Wcf,Exception Handling,这听起来像是一个愚蠢的问题,但我似乎找不到一个明显的答案。我必须快速创建一个简单的WCF服务,我已经创建了所有我需要的类,这些类用DataContract和DataMember属性修饰,我已经创建了一个自定义的异常类,一切都正常。但是,如果在我的服务中抛出异常,无论它是什么,我应该始终抛出带有详细消息的FaultException,或者使用不同的异常类型。我猜我总是抛出那个异常,因为客户端可以处理那个单一的异常类型 另外,如果客户机向我传递了一个完全为null的对象,那么我意识到抛出异常是正常的

这听起来像是一个愚蠢的问题,但我似乎找不到一个明显的答案。我必须快速创建一个简单的WCF服务,我已经创建了所有我需要的类,这些类用DataContract和DataMember属性修饰,我已经创建了一个自定义的异常类,一切都正常。但是,如果在我的服务中抛出异常,无论它是什么,我应该始终抛出带有详细消息的
FaultException
,或者使用不同的异常类型。我猜我总是抛出那个异常,因为客户端可以处理那个单一的异常类型

另外,如果客户机向我传递了一个完全为null的对象,那么我意识到抛出异常是正常的,但是如果该类的一个成员不是预期的,比如null或者甚至是空字符串,该怎么办?我仍然会抛出异常作为原因,还是只是在响应对象中返回一条消息?我知道这听起来可能是个愚蠢的问题,但我只是担心我可能会使用异常来驱动功能,但我认为抛出一个exeption是有意义的

非常感谢

Paul

WCF支持“两种类型”的异常。首先是意外异常-从代码中抛出的每个常见.NET异常、每个未处理的异常和每个非泛型FaultException都作为意外异常处理。意外的异常是SOAP:Fault,WSDL中没有描述它。通道出现意外异常故障

第二类是预期的异常。预期的例外情况定义为FaultContracts。您可以通过显示泛型FaultException来抛出预期异常。预期的异常在WSDL中描述为WSDL:操作的错误消息。故障协定被添加为预期异常的XSD类型。由于这个原因,客户端可以解析SOAP:Fault的细节,并将其作为强类型对象提供。您可以在故障合同中提供一些有关异常的信息—您可以向客户提供哪些信息


当您对服务进行编码时,您必须区分预期异常和非预期异常。例如,当您创建操作GetDataById时,预期异常为DataNotFound或IncorrectIdFormat等。因此,数据验证是预期异常,您可以告诉用户哪个字段的值不正确。您还可以使用一些常规的预期异常来包装其他意外问题-此异常通常应在IErrorHandler实现中作为全局异常处理程序使用。如果不使用全局异常处理程序,则不应处理意外异常

非常感谢您的回复。我已经实现了一个IErrorHandler,现在它是有意义的。