你如何处理ws生产者方抛出的消费者方面的异常?
我现在正在使用SOAP,因为我可以轻松使用<cfinvoke>
而不用担心JSON会搞乱我的数据类型。但它的缺点是:
除了SOAP之外,你会用什么来做CF-to-CF方法调用?我可以想到这些替代方案:
<cfhttp>
至?method=remoteMethod
缺点:需要使用自定义json序列化程序,因为CF会弄乱数据字段,如电话号码(序列化为浮点数)或日期(序列化为人类可读日期)
<cfhttp>
至.cfm
缺点:需要确保onRequest和其他布局不呈现(不能使用onCFCRequest()
)
有任何意见或建议吗?
答案 0 :(得分:1)
最近我更喜欢cfhttp到一个URL,该URL提供基于CFC / WSDL的webservices的JSON结果。我发现这更容易,原因有两个:
1)当从CF或jQuery(或实际上任何其他消费者)消费时,这很有效。
2)你可以更好地控制输出,这听起来就像你正在经历的那样。
对于客户端的错误捕获,我认为服务器端错误捕获非常简单。只需注意404,并根据需要处理响应正文(通过电子邮件发送,记录或报告给用户)。关于JSON序列化问题,这还不是我遇到过的问题。
当我使用基于wsdl的webservices时,我们使用try / catch捕获错误,然后将错误转储通过电子邮件发送给开发人员。但这并不好,因为真正的错误通常隐藏在堆栈跟踪中,并且被所涉及的所有CF抽象层遮盖。基本上所有这些告诉我在这些情况下我需要去寻找服务器上的错误日志,所以我可以找到问题的真正来源。
答案 1 :(得分:1)
这是一个边缘意见问题,所以我会用可能的解决方案来解决您提出的每个问题。
然后如何处理由ws消费者端抛出的异常 ws生产者方?
解决方案:决定您将始终返回的公共通信“包”(例如,具有某些键的结构),无论是否抛出异常。例如:
result = StructNew();
result.error = false
result.msg = "Success";
result.data = myQuery
现在总是可以返回结果,客户可以引用键'错误','msg'和'data'的预期。
缺点:需要使用自定义json序列化程序,因为CF会搞乱 数据字段,如电话号码(序列化为浮点数)或日期 (序列化到人类可读的日期)
解决方案:从JSON切换到XML:
OR
缺点:需要确保onRequest和其他布局不呈现(不能使用onCFCRequest())
解决方案:
注意:#2也解决了上述问题,引用:
WSDL needs reloading during development