【发布时间】:2019-08-26 15:43:44
【问题描述】:
ColdFusion 似乎将其初始请求缓存到 Web 服务。在修改 Web 服务的签名(例如,向 Web 服务方法添加参数)时,ColdFusion 似乎不知道如何调用该 Web 服务,直到“ColdFusion 2016 Application Server”Windows 服务重新启动。这会使开发变得复杂,因为它会在重启期间影响所有 ColdFusion 网站,从而有效地清除所有会话。
这些网络服务的执行上下文是通过CreateObject 方法。
Application.MyWebServiceVariable = CreateObject("webservice", "PATH");
过去其他人曾提到过使用refreshwsdl 参数。
oWsdlArgs = structNew();
oWsdlArgs.refreshwsdl="yes";
Application.MyWebServiceVariable = CreateObject("webservice", "PATH", oWsdlArgs );
不幸的是,这并不能解决必须重新启动实际 Windows 服务才能让 ColdFusion 刷新其该 Web 服务方法签名的内部缓存的根本问题。
我还可以确认,简单地使用 ApplicationStop() 重新启动 ColdFusion 应用程序不起作用。
有没有办法回收这个 web 服务签名的内部缓存,让开发者不需要重启 Windows 服务?
附加说明
- 在 ColdFusion 9 到 ColdFusion 2016 中出现
- Web 服务基于 SOAP,托管在 IIS 上
- Web 服务的逻辑在 DLL 中
【问题讨论】:
-
您的 Web 服务是用 ColdFusion 编写的,还是从 ColdFusion 调用其他(第 3 方)Web 服务?如果是后者,那么这就解释了为什么
refreshwsdl不起作用。这是专门针对用 ColdFusion 编写的 Web 服务的。 -
@Miguel-F 不,Web 服务是用 C# 编写的,编译为 DLL 并通过 IIS 公开,其中 WSDL 直接从 DLL 派生。
-
多次遇到同样的问题,但不幸的是不记得我发现了什么,如果有的话。我相信 CF 或下面的东西会创建对应于 web 服务对象的 java 类文件。如果你能找到它们,也许可以直接清除它们..
-
当您使用
CreateObject("webservice", ...)时,我猜您将Web 服务数据存储在CFAdmin中。能否在调用 CreateObject 时直接提供 WSDL 的地址? -
@MiguelF - 你在哪里读到它只适用于 CF Web 服务?我一直认为它适用于任何 WS。我使用 WCF 测试客户端进行了快速测试,它确实在 CF 2016,0,10,314028 下刷新。
标签: web-services soap coldfusion