我刚刚开始使用 Lotus Notes 进行 Web 服务。我想做的是创建一个生成序列号的 Web 服务。生成数字的代码基于我们在数据库中使用了一段时间的现有代码(只是直接的 Lotus 脚本,没有 Web 服务)。基本上有一个存储下一个号码的文档,下一个号码被返回并更新,以便检测到下一次调用保存冲突,如果保存号码时出现问题,则再次尝试该号码。
我想我可能会使用网络服务来生成号码。那么 Web 服务是顺序处理还是并行处理?因为如果他们是连续的,那么我就不需要处理两个试图同时保存号码的人。
我刚刚开始使用 Lotus Notes 进行 Web 服务。我想做的是创建一个生成序列号的 Web 服务。生成数字的代码基于我们在数据库中使用了一段时间的现有代码(只是直接的 Lotus 脚本,没有 Web 服务)。基本上有一个存储下一个号码的文档,下一个号码被返回并更新,以便检测到下一次调用保存冲突,如果保存号码时出现问题,则再次尝试该号码。
我想我可能会使用网络服务来生成号码。那么 Web 服务是顺序处理还是并行处理?因为如果他们是连续的,那么我就不需要处理两个试图同时保存号码的人。
Web 服务是两个系统在没有共同语言的情况下相互通信的一种方式。
例如,连接到 .Net 服务器的 LotusScript 代理。
在 Domino 上创建 Web 服务提供者(服务器)时,您可以使用 LotusScript 或 Java 对其进行编码。然后,服务器为消费者(客户端)提供一个 WSDL 文件,以编写与该 Web 服务对话所需的代码。
本教程应该为您更好地解释它:
现在至于多米诺骨牌。Web 服务按照从服务器请求的顺序运行。但是,无法控制说“在 Web 服务 X 完成之前不要开始”。
您也可以将其编码到应用程序中,但除非您对此进行反击,否则其他用户会面临内存/性能问题死锁的严重风险。
Domino 服务器也可以设置为不并行运行 Web 服务/代理。但是你又冒着同样的问题的风险。
如果它是唯一 ID,那么您可以使用从 Web 服务创建的文档的 UNID。或者您可以通过评估使用@UNIQUE,但两者都只返回文本。
来自 Lotus Designer 文档:
要在服务器上启用并发 Web 服务,您必须在该服务器上启用并发 Web 代理。打开要编辑的服务器文档。单击 Internet 协议 - Domino Web 引擎选项卡。启用同时运行 Web 代理。
并发 Web 服务调用的最大数量由“最大并发代理”设置确定。从 Lotus 管理文档:
最大并发代理数 指定允许同时运行的代理数。有效值为 1 到 10。默认值为 1(白天)和 2(夜间)。启用更多并发代理可以减轻负载很重的代理管理器,但也会减少可用于运行其他服务器任务的资源。
Lotus Notes Domino 版本 8.5.x
我原以为它们会默认按顺序运行,因为异步 Web 代理处于关闭状态,除非您将其打开。因此,尽管如果您只通过 Web 服务分配一个数字并且您没有更改异步设置,那么执行“安全”顺序编号是一个很好的设计模式,那么您会没事的
我还要补充一点:
有一个简单的解决方案可以避免同步性考虑。
您应该使用 生成一个临时编号@Unique
,然后使用计划代理按文档创建的顺序分配序列号,使用正确构成的视图仅选择未处理的文档。如果您不关心文档的创建顺序,而只关心所有编号都是唯一的,则不需要查看,您只需在未处理的文档上触发代理即可。
临时编号可以临时用作参考,直到分配了适当的序号。
当计划的代理运行时,它应该向作者发送带有正确参考号的确认。
是的,Web 服务将并行运行。但是既然你写了你的代码处理保存冲突,你应该没有问题。
正如 2 个用户的标准注释调用一样:第一个获取文档,然后第二个获取文档并保存(快速两个),然后首先将获得保存冲突。总之,是的,它是并行的,但它不是问题。
或者,您可以导出到 DXL 并获取标签的 sequence= 属性。不过,这仅在您访问数据库的单个实例时才有效。并且 DXL 导出/XML 导入是一个巨大的开销。
不幸的是,我看不到从 LotusScript NotesDocument 轻松获取注释序列号的方法。如果您有一个有效的支持合同,您可以为软件增强请求打开一个问题管理报告(IBM 的说法是“APAR”,尽管我不知道它的首字母缩写词扩展为什么)。
祝你好运!