我正在使用消费WCF服务的客户端。在各种情况下,服务只是通过相关的消息引发FaultException,通知给出的故障背后的原因。处理WCF故障
这些错误中有一些是我们的客户端应用程序可以处理的东西,但是我只是在FaultExceptions消息或Reason中执行一些字符串匹配而不是犹豫,以确定它是否可以满足我们的要求。
我希望FaultException上的FaultCode可以用来识别我们可以处理的特定类型的Fault,但看起来这纯粹是为了识别一些SOAP错误。如果我对此的解释不正确,请纠正我。
我知道它可能会引发FaultException,但我认为期望为出现故障后的每个原因创建新类型是不现实的。
你如何处理这种情况。作为一个人为的例子。考虑提供以下方法的服务;
RecordDetails GetRecordById(string id)
void Add(RecordDetails record)
void Update(RecordDetailsUpdateRequest rdur)
现在,在上面的例子,如果你调用GetRecordById与不存在的ID,您收到的FaultException与说明消息“记录无法找到”。同样,如果您为已存在的记录调用Add或为不存在的记录调用Update,则只需通过Message/Reason详细说明失败原因即可获得FaultException。我需要知道是否存在记录,以确定是否应更新或插入。正如我所提到的,由于我无法控制它们是否会保持不变,所以我很犹豫是否仅仅匹配字符串。
在这种情况下(与FaultException有关的类型详述了RecordNotFoundException等)或与FaultException相关的一些泛型类型会定义与错误相关的特定细节,您会期望什么呢?例如,带有成员代码的RecordOperationExcpetion类(失败原因的常量或枚举标识符)以及用户友好的消息。
至少这样,我可以识别错误原因而不必求助于字符串匹配。
您的想法值得赞赏。
这当然是我的直觉,但我只是热衷于找出更有经验的从业者在过去所做的那样(这仍然是相当新的给我)。不幸的是,我无法控制服务中的功能。但是,如果我可以提供一些很好的例子,说明为什么它应该以特定的方式完成,那么它将有希望让我们所有的生活变得更容易。感谢您的输入:) –
@Mr Moose - 我自己并不是专家,但就我所知,上述FaultContracts是最佳实践。以下是一些可能为您进一步阐述的链接:[指定和处理合同和服务中的错误](http://msdn.microsoft.com/zh-cn/library/ms733721.aspx),[WCF中的异常处理故障合同](http://www.c-sharpcorner.com/UploadFile/ankithakur/ExceptionHandlingWCF12282007072617AM/ExceptionHandlingWCF.aspx),[Fault Contract](http://www.wcftutorial.net/Fault-Contract.aspx)。 – Tim