web-services - 修改底层 Web 服务签名后如何回收 ColdFusion Web 服务
问题描述
ColdFusion 似乎将其初始请求缓存到 Web 服务。在修改 Web 服务的签名(例如,向 Web 服务方法添加参数)时,ColdFusion 似乎不知道如何调用该 Web 服务,直到“ColdFusion 2016 Application Server”Windows 服务重新启动。这使开发变得复杂,因为它会在重新启动期间影响所有 ColdFusion 网站,从而有效地清除所有会话。
这些web服务的执行上下文都是通过CreateObject
方法。
Application.MyWebServiceVariable = CreateObject("webservice", "PATH");
过去,其他人曾提到过使用该refreshwsdl
论点。
oWsdlArgs = structNew();
oWsdlArgs.refreshwsdl="yes";
Application.MyWebServiceVariable = CreateObject("webservice", "PATH", oWsdlArgs );
不幸的是,这并不能解决必须重新启动实际 Windows 服务才能让 ColdFusion 刷新其该 Web 服务方法签名的内部缓存的根本问题。
我还可以确认,简单地重新启动 ColdFusion 应用程序使用ApplicationStop()
不起作用。
有没有办法回收这个web服务签名的内部缓存,这样开发者就不需要重启windows服务了?
补充说明
- 出现在 ColdFusion 9 到 ColdFusion 2016 中
- Web 服务基于 SOAP,托管在 IIS 上
- Web 服务的逻辑在 DLL 中
解决方案
如果您使用 createObject 和/或 cfinvoke 调用这些 Web 服务,那么如您所见,CF 会缓存定义。我发现在不重新启动 CF 服务的情况下刷新这些定义的最简单方法是,如果您有权访问 Coldfusion 管理员。
CF 管理员 -> 数据和服务 -> Web 服务
在那里,您应该会看到 CF 缓存的每个 wsdl 的条目,以及用于强制更新的按钮。
推荐阅读
- mysql - 如何将 JSON 解析为 MySQL
- php - 发送邮件:主机 smtp.gmail.com 与 smtp.domainname.com 有什么区别?哪种配置更好/更快?
- c# - 将图片保存为 Tiff 格式而不进行压缩
- sdl-2 - 如何在 SDL2 中不使用表面的情况下找出文本的宽度和高度?
- excel - 从选定区域中删除空行并有条件地将值替换为上方单元格中的值
- excel - 如何使用 Excel VBA 仅更新特定工作表而不是整个工作簿中的链接?
- mysql - 关于重复数据的 SQL
- excel - 有没有办法让 SAP GUI 代码适用于所有版本?
- javascript - 为什么改变一个属性(对象)也会在不同的单独声明的属性中发生变化?
- php - 如何在 PHP 中强制下载 .xlsx 文件而不使其损坏?