CF Web Service出现严重的间歇性错误

时间:2010-02-20 02:18:57

标签: soap coldfusion axis

我们编写和维护的基于CF Web Services的API令人难以置信的令人沮丧。我们已经有一个多年的API,它可以稳定地与Ruby,PHP和ColdFusion客户一起工作。然后今年出现了一个.NET客户端,我们发现由于我们广泛使用结构,我们的Web服务无法与静态类型的语言互操作。

我们最终意识到我们必须重新编写没有结构的API,我们已经这样做了。它现在使用缩放器值,数组和CFC(转换为SOAP complexTypes)。 .NET客户端很高兴,我们用大约6种不同的语言编写了概念验证客户端,以确保我们这次可以互操作。

令我们非常沮丧的是,我们的ColdFusion 7服务器似乎无法可靠地为新API提供服务。重启后大约一天左右工作,然后客户端开始出现错误,如:

错误:coldfusion.xml.rpc.CFCInvocationException [java.lang.ClassNotFoundException:tafkan.remote_api.pfapi.v.trunk.rsp_pf_survey_status_array]

java.lang.NoClassDefFoundError:tafkan / remote_api / pfapi / v / trunk / pf_unit

重新启动CF实例是解决问题的唯一方法。重建API需要花费大量的时间和金钱,所以每个人都真的对此有所了解。

我们注意到CF实例的WEB-INF / cfc-skeletons目录最终似乎有API的两个CFC的两个类副本。例如:

-rw-r--r--  Feb 17 09:15 remote_api.pfapi.v.trunk.pf_datum.class
-rw-r--r--  Feb  3 12:20 tafkan.remote_api.pfapi.v.trunk.pf_datum.class

似乎错误来自命名空间或类搜索路径问题,因此我们尝试将所有CFC引用切换为完全限定(点映射以映射开头),而不是仅仅对当前目录中的CFC进行简单引用。这似乎很有希望,但问题在24小时内回来了。

环境:

  • ColdFusion 7,0,2,142559 with hf702-70523,2-instance cluster
  • Sun Java 1.4.2_13
  • Apache 2.0.52
  • Centos 4.5 32位

也许升级这些令人尊敬的软件之一会有所帮助吗?也许只升级AXIS?

Adob​​e支持似乎不是一种选择,因为CF7已经过EOL并且在扩展扩展支持(并且仅仅持续了几天)。

更新

感谢所有加入此讨论的人!以下是目前情况的最新进展。

这项服务今天第一次被淘汰出局。其中一个集群实例仍然能够生成WSDL,而另一个实例则表示:

AXIS error
Sorry, something seems to have gone wrong... here are the details:
Exception - java.lang.NoClassDefFoundError: tafkan/remote_api/pfapi/v/trunk/rsp_pf_numeric_array

cfc-skeletons目录都包含一个名为tafkan.remote_api.pfapi.v.trunk.rsp_pf_numeric_array.class的文件,并且似乎不包含我们有时看到的其他命名文件(remote_api.pfapi.v.trunk .rsp_pf_numeric_array.class)。自昨天启动服务器以来,cfc-skeletons中的文件似乎没有被修改过。

两个实例的正常运行时间约为21.5小时。我在没有JIT(-Xint)的情况下运行。

我现在重启了两个实例。它们现在运行在Sun Java 1.4.2_19(而不是_13)上,并且JIT已经重新启用,因为它显然没有导致这个错误,没有它就会大大减慢。我还清除了“保存类文件”复选框。

现在,我们再等一下......

更新2 问题依然存在。我不确定此时还有什么可以尝试的。精氨酸!

仅供参考,这是http://www.houseoffusion.com/groups/cf-talk/thread.cfm/threadid:60922

的交叉发布

2 个答案:

答案 0 :(得分:3)

我已经阅读了这个帖子和CFTalk帖子。关于变通方法的初步想法似乎已经由Mark Kruger和Dave Watts提出过。我唯一的解决方法是捕获错误并使用Service Factory方法刷新Web服务存根。 (在CF8-9中有一个Admin API方法来执行此操作,不确定CF7)。

研究错误我缩小了与这些匹配的可能匹配:

http://www.houseoffusion.com/groups/cf-talk/message.cfm/messageid:144821 这是匹配但未解决的

http://blog.coldfusionpowered.com/?p=28 这是一个非常类似的错误,通过所有CFC上的“修复案例问题”来解决。调用

ColdFusion Google Adwords Business Component Error 通过重写代码和删除cfcomments来解决(我怀疑其他因素实际上负责解决它)

http://forums.crystaltech.com/index.php?topic=22364.0 我们现在越来越近了。决议涉及错误地有两个文件根

http://qaix.com/coldfusion/313-410-web-service-on-cfmx-6-1-jrun-suddenly-not-working-read.shtml 错误消息的完全匹配。将CFC映射到doc root的完全匹配。解决方案是只有1个映射指向docroot,只是“/”。这可能是解决方案。在MX 6 / 6.1和7中,有一个指向docroot的“/”的默认映射。如果你有另一个指向docroot的映射,那么我可以看到这个问题可能会出现。检查映射的物理路径并在此处尝试解决方案,仅使用“/”映射。

答案 1 :(得分:0)

外部客户端如何与您的Web服务进行交互?只是通过我假设的WSDL?

是否有可能某个客户端应用程序,单元测试...某些东西,任何东西......有错误的URL ...有一个URL到你的WSDL文件中有“tafkan”吗?

如果我正在研究它,可能我认为的第一条途径是找出可能导致该问题的原因。 “tafkan”是您系统中的有效目录吗? .cfc文件实际存在于文件系统中的哪个位置,如果CF Admin中的这些路径有任何映射,那么人们用来访问您的Web服务的URL是什么?

我相信,这里的关键是进入CF的脑袋并问它“为什么你会产生并且正在寻找一个以”tafkan“作为一个包的课程?