文章 姚 鑫 · 十一月 24, 2024 5m read

第三十一章 TCP 高级主题

本页讨论使用 TCP/IPIRIS 数据平台进程之间进行通信的几个高级主题。

连接管理

服务器一次仅维护一个连接。如果在另一个连接打开时第二个客户端尝试连接,TCP/IP 会将该客户端放入队列中。在队列中时,第二个客户端可以向端口写入数据,就像已连接一样。第二个客户端写入的数据保留在缓冲区中,直到第一个连接关闭并且第二个客户端连接为止。

如果第二个客户端在连接存在之前发出READ,则会挂起。当第二个客户端在队列中时,第三个客户端的任何连接尝试都会失败。

如果已经打开 TCP 设备的客户端在第一个连接仍然存在时尝试第二次连接,则第二个OPEN命令会导致错误。将这种情况视为错误而不是USE命令可以防止出现意外的结果。如果错误的程序认为它已打开新连接,而实际上它正在重用可能具有不同目标或不同参数的现有连接,则可能会出现此类意外结果。

TCP 设备的作业命令

可以使用JOB命令来实现TCP并发服务器。 TCP 并发服务器允许同时为多个客户端提供服务。在这种模式下,客户端不必等待服务器完成为其他客户端提供服务。相反,每次客户端请求服务器时,它都会为该客户端生成一个单独的子作业,只要客户端需要它,该子作业就会保持打开状态。一旦生成该子作业(由JOB命令的返回指示),另一个客户端就可以请求服务,并且服务器也将为该客户端创建一个子作业。

非并发和并发模式下的客户端/服务器连接。

0
0 99
文章 姚 鑫 · 十一月 23, 2024 2m read

第三十章 TCP 客户端 服务器通信 - 作业服务器资源

作业服务器资源

如果正在编写一个IRIS服务器来与无法控制的客户端连接,则服务器进程必须发出CLOSE命令来关闭TCP连接。就 IRIS而言,CLOSE命令确实会关闭连接,但是在内部TCP/IP会在服务器上为这个连接保留最长两分钟的资源。

jobserver用于为TCP/IP作业提供服务时,可能会产生意想不到的结果。当一个JOBSERVER进程执行暂停时,该进程立即返回到可用的JOBSERVER进程池,但其资源在内部保留最多两分钟。由于JOBSERVER进程是在第一个可用的基础上分配的,因此来自数量相对较少的客户机的重载可能会耗尽JOBSERVER进程的资源。

为了避免这个问题,在JOBSERVER下运行的JOB打开的TCP/IP服务器应该显式地发出一个CLOSE命令,然后在最后的QUITHALT)命令之前发出一个简短的HANG命令。根据TCP/IP规范,需要一个HANG 120来保证在JOBSERVER的转世之间没有资源仍在使用。在实践中,一秒的HANG通常足以在JOBSERVER进程之间均匀地分配资源负载。

0
0 71
文章 姚 鑫 · 十一月 22, 2024 2m read

第二十九章 TCP 客户端 服务器通信 - 记录的拼接

记录的拼接

在某些情况下,TCP会将不同的记录连接在一起形成单个记录。如果客户端或服务器进程向一个由WRITE分隔的TCP端口发出一系列WRITE命令,则可能会发生串接!或用于刷新缓冲区的WRITE#命令,而不管读命令是否在连接的另一端等待。

Process A                            Process B
%SYS> USE "|TCP|41880" R A U 0 W A   %SYS> USE "|TCP|41880" WRITE "ONE",!,"TWO"
<RETURN>                             <RETURN>
ONE
%SYS> USE 41880 R A U 0 W A 
<RETURN>
TWO

第二个例子概述了在进程B完成将两条记录写入到TCP端口之后,当它发出读命令时,进程A如何接收一条串联的记录。

Process A                           Process B
.                                   %SYS> USE "|TCP|41880" WRITE "ONE",!,"TWO"
.
0
0 93
文章 Louis Lu · 十一月 22, 2024 1m read

当我们将 InterSystems IRIS 安装在Windows 系列操作系统中时,往往同时使用IIS 作为其Web 服务器。

但这时候我们却发现,由RESTful返回的错误信息却不能正常显示出来了,特别是在调试程序的时候,非常不方便。

比如在测试 FHIR Post/Put 请求时,我们的请求消息体中包含不正确的内容,这时我可以看到返回的是HTTP 400 Bad Request的返回内容.

我无法具体知道请求消息体哪句出错了,这对我调试程序造成很大困扰。

 

解决方法:

1. 打开IIS的管理页面,双击 错误页

2. 选择右侧 编辑功能设置

3. 选择错误响应下的 详细错误 选项。

我们再次请求,此时可以看到页面上显示了详细的错误信息

相关详细信息可以查看文档:Configuring IIS to Return SOAP Fault Details 以及 HTTP Errors

0
0 180
文章 姚 鑫 · 十一月 21, 2024 2m read

第二十八章 TCP 客户端 服务器通信 - JOB命令示例

JOB命令示例

以下示例显示了一个非常简单的并发服务器,只要它检测到来自客户端的连接,就会产生一个子作业。 JOB指定一个并发服务器位开关值(值16)并通过符号表(值1):16+1=17

server
  SET io="|TCP|1" 
  SET ^serverport=7001 
  OPEN io:(:^serverport:"MA"):200 
  IF ('$TEST) { 
       WRITE !,"Cannot open server port" 
       QUIT }
  ELSE { WRITE !,"Server port opened" }
loop
     USE io READ x ; Read for accept 
     USE 0 WRITE !,"Accepted connection" 
     JOB child:(:17:io:io) ;Concurrent server bit is on 
     GOTO loop
child
  WRITE $JOB,! ; Send job id on TCP device to be read by client 
  QUIT
client
  SET io="|TCP|2" 
  SET host="127.0.
0
0 101
文章 姚 鑫 · 十一月 20, 2024 3m read

第二十七章 TCP 客户端 服务器通信 - 连接管理

连接管理

服务器一次只维护一个连接。如果第二个客户端在另一个连接打开时尝试连接,则 TCP/IP 将该客户端放入队列中。在队列中时,第二个客户端可以像已连接一样写入端口。第二个客户端写入的数据保留在缓冲区中,直到第一个连接关闭并且第二个客户端连接。

如果第二个客户端在连接存在之前发出 READ,它就会挂起。当第二个客户端在队列中时,第三个客户端的任何连接尝试都会失败。

如果已经打开 TCP 设备的客户端在第一个连接仍然存在时尝试第二次连接,则第二个 OPEN 命令会导致<COMMAND> 错误。将这种情况视为错误而不是 USE 命令可以防止出现意外结果。如果一个错误的程序认为它打开了一个新连接,而实际上它正在重用一个可能具有不同目标或不同参数的现有连接,则可能会出现这种意想不到的结果。

TCP 设备的作业命令

可以使用 JOB 命令来实现 TCP 并发服务器。 TCP 并发服务器允许同时为多个客户端提供服务。在这种模式下,客户端不必等待服务器完成对其他客户端的服务。相反,每次客户端请求服务器时,它都会为该客户端生成一个单独的子作业,只要客户端需要它,该子作业就会保持打开状态。一旦生成此子作业(由 JOB 命令的返回指示),另一个客户端可能会请求服务,服务器也会为该客户端创建一个子作业。

非并发和并发模式下的客户端/服务器连接。

0
0 149
文章 姚 鑫 · 十一月 19, 2024 2m read

第二十六章 TCP 客户端 服务器通信 - $ZB 和 READ 命令

$ZBREAD 命令

$ZB 保存终止读取的字符。该字符可以是以下之一:

  • 终止字符,例如回车
  • 固定长度 READ x#y 的第 y 个字符
  • READ *X 的单个字符
  • 定时读取过期后的空字符串
  • 转义序列
  • 请注意,如果一个字符串以 CR LF 结尾,则只有 CR 会放在 $ZB 中。

TCP 设备的 WRITE 命令

在使用 OPENUSE 建立连接后,WRITE 命令将数据从客户端或服务器发送到 TCP 设备。

语法如下:

WRITE x
WRITE ! 
WRITE #

WRITE如何工作

WRITE x 在建立连接后将 x 从客户端或服务器发送到缓冲区。

WRITE !WRITE # 不表示换行和换页。相反,它们告诉 IRIS 刷新缓冲区中保留的所有字符,并通过网络将它们发送到目标系统。

可以使用 %SYSTEM.INetInfo类的 TCPStats() 方法确定当前 TCP 连接执行的写入次数。

WRITE 修改 $X$Y

IRIS 将缓冲区中的字符数存储在 $X 特殊变量中。

ASCII 字符 <return><line feed> 不包括在此计数中,因为它们不被视为记录的一部分。用 WRITE 刷新缓冲区!将 $X 重置为 0,并将 $Y 的值增加 1

0
0 104
文章 姚 鑫 · 十一月 18, 2024 2m read

第二十五章 TCP 客户端 服务器通信 - TCP 设备的 READ 命令

TCP 设备的 READ 命令

从服务器或客户端发出 READ 命令以读取客户端或服务器设置的任何字符。

语法如下:

READ var:timeout 
READ *var:timeout
READ var#length:timeout

超时参数虽然是可选的,但强烈建议使用,因为如果指定了超时,则 READ 的成功或失败由 $TEST 特殊变量的值指示。如果在超时到期之前读取尝试成功,则 $TEST 设置为 1;如果超时到期,$TEST 设置为 0

超时参数支持秒和秒的分数到 1/100 秒。例如,1010.5.5.05

对于 SSL 连接,如果连接建立后另一方从未发出读或写命令,则作业可以等待第一个读或第一个写命令。在这种情况下, IRIS 支持 READ 命令的读取超时和 WRITE 命令的写入超时(使用 /WRITETIMEOUT=n 选项)。如果没有指定读或写超时,则作业将等待,直到对方发出读或写命令。

可以使用 %SYSTEM.INetInfo类的 TCPStats() 方法确定当前 TCP 连接执行的读取次数。

READ 修改 $ZA$ZB

应用程序可以通过测试 $ZA$ZB 的值来了解连接和读取是如何成功的。

$ZAREAD 命令

$ZA 报告连接状态。

0
0 89
文章 姚 鑫 · 十一月 17, 2024 3m read

第二十四章 TCP 客户端 服务器通信 - 当前 TCP 设备

当前 TCP 设备

可以使用 %SYSTEM.TCPDevice方法返回当前 TCP 设备的 IP 地址和端口号。可以使用 Help() 方法列出这些方法,如下所示:

  DO $SYSTEM.TCPDevice.Help()

可以通过在 Help() 中指定方法名称来显示有关特定方法的信息,如以下示例所示:

  DO $SYSTEM.TCPDevice.Help("LocalAddr")
IMP>DO $SYSTEM.TCPDevice.Help("LocalAddr")
method:class的描述 LocalAddr:%SYSTEM.TCPDevice
 
LocalAddr(Format:%Integer=0)
Get local IP address of current TCP device.<br>
<br>
<b>Parameters:</b> <br>
<b>Format</b> - The format of address to be returned. If this argument is omitted the default value is 0.
0
0 85
文章 姚 鑫 · 十一月 15, 2024 7m read

第二十二章 TCP 客户端 服务器通信 - TCP设备的OPEN和USE命令关键字

TCP设备的OPENUSE命令关键字

可以使用位置参数(如上所述)或关键字参数。下表描述了使用OPENUSE命令控制TCP设备的关键字。还有其他只能在OPEN命令中指定的OPEN-only关键字(本章稍后将描述)。所有关键字参数都是可选的。

TCP设备的OPENUSE命令关键字

Keyword Default Description
/ABSTIMEOUT[=1] 0 指定读超时行为。确定TCP在接收到数据时是否应重新初始化超时时间。如果/ABSTIMEOUT=0(默认值),则每次接收数据时timeout都会重置为原始值。如果/ABSTIMEOUT/ABSTIMEOUT=1,则在接收数据时超时时间继续倒数。
/ACCEPT[=n] or /ACC[=n] 0 对应于“A”模式参数字符,该参数指定一旦接受来自客户端作业的连接,服务器上的初始读取就以零长度字符串终止。/ACCEPT/ACCEPT=n对于n的非零值启用A模式。/ACCEPT=n表示零值n禁用a模式。
/CLOSEFLUSH[=n] 1 指定当设备关闭时,对保留在输出缓冲区中的数据的处理。/CLOSEFLUSH/CLOSEFLUSH=n对于n的非零值将刷新剩余数据。
0
0 124
文章 姚 鑫 · 十一月 14, 2024 2m read

第二十一章 TCP 客户端 服务器通信 - 客户端OPEN命令

客户端OPEN命令

客户端OPEN命令与服务器端OPEN命令只有一个方面的不同:第一个设备参数必须指定要连接的主机。要指定主机,需要包括客户端识别为主机的名称或Internet地址。

一旦建立连接,OPEN开就会成功。此时,可以读取或写入该TCP设备。但是,如果连接的服务器端是另一个 IRIS进程,则在使用WRITE命令将一些数据从客户端发送到服务器之前,服务器不会完成其连接端。因此,必须在发出任何读取命令之前发出写入命令。

客户端 OPEN 命令的一些示例是:

   OPEN "|TCP|4":("hal":4200::$CHAR(3,4)):10

此命令在端口 4200 上打开到主机 hal 的连接。它没有指定模式字符串。它指定了两个终止符(ASCII $CHAR(3)$CHAR(4)),以及默认的输入和输出缓冲区大小。它指定 10 秒的超时。

以下命令与上一个命令相同,只是目标是 IPv4 格式的显式 IP 地址。

   OPEN "|TCP|4":("129.200.3.4":4200::$CHAR(3,4)):10

可以使用 OPEN 关键字 /USEIPV6 来指定要使用的协议。

下面的命令连接到远程主机“larry”上的时间服务器,并在主输入设备上以ASCII格式打印远程主机的时间。

0
0 111
文章 姚 鑫 · 十一月 13, 2024 3m read

第二十章 TCP 客户端 服务器通信 - 立即发送模式(Q 模式)

立即发送模式(Q 模式)

在立即发送模式下,每个 WRITE 命令都作为其自己的数据包输出。如果不使用立即发送模式,则必须包括终止符或发出命令 WRITE *–3 以输出数据包。

通过指定“Q”模式字符或/SENDIMMEDIATE(或/SEN)关键字参数进入此模式。要关闭此选项,请指定以下任一选项:

   USE TCPDEVICE:(/SEN=0)
   USE TCPDEVICE:(::"-Q")

要重新打开此选项,请指定以下任一选项:

   USE TCPDEVICE:(/SEN=1)
   USE TCPDEVICE:(::"+Q")

立即发送模式与/NODELAY模式结合使用,前者在每次写入时创建一个包,后者在创建每个包时立即发送。当这两个选项都启用时,单个数据突发的传输速度将最大化。当每个数据单元的及时传送至关重要时,例如在传输鼠标移动时,这是有用的。当两者都关闭时,一个数据包可能包含多个写入,一个传输可能包含多个数据包。这减少了网络流量并提高了整体性能。立即发送模式的默认设置为关闭。/NODELAY模式的默认设置为打开。

流模式(S模式)

在流模式下, IRIS不会保留数据流中的TCP消息边界。发送时,如果数据不适合消息缓冲区, IRIS会在将数据放入缓冲区之前刷新缓冲区。

接收时,可以接收最大字符串长度的数据。

0
0 127
文章 姚 鑫 · 十一月 12, 2024 3m read

第十九章 TCP 客户端 服务器通信 - 数据包模式

数据包模式

如果未指定模式,则默认为数据包模式。如果流模式被禁用,则该模式默认为分组模式。

在分组模式中,只要有一些数据要返回,读取命令就会完成。数据包模式允许在输出缓冲区中构建整个TCP数据段,然后通过发出WRITE*-3WRITE!命令。

如果在没有要发送的字符的情况下发出WRITE*-1来启动一个TCP发送操作,则会收到一个<WRITE>错误。如果发出WRITE OF空字符串,则会收到<COMMAND>错误。

在分组模式下可以发送的字符串的最大长度为1024个字符。如果在未刷新缓冲区的情况下超过此限制,则会收到<WRITE>错误。

因为 TCP/IP 忽略长度为 0 的记录,所以如果在其中没有字符时刷新写入缓冲区,会收到 <WRITE>错误。

在服务器收到连接请求之前,从服务器到客户端的WRITE命令会在服务器上产生<WRITE> 错误。

回车模式(C模式)

此模式修改对输入和输出的回车处理。

在输出时,WRITE ! 生成“CR LF”,而WRITE#生成“CR FF”

在输入时,在启用T模式的情况下,服务器尝试将相邻的CRLF或相邻的CRFF记录为$ZB中的单个终止符。如果CRLF没有在彼此的短时间间隔内到达,则将它们作为单独的终结器进行处理。默认情况下,间隔为1秒。

监控断开模式(D模式)

此模式打开或关闭异步断开监控。

0
0 77
文章 姚 鑫 · 十一月 11, 2024 4m read

第十八章 TCP 客户端 服务器通信 - 使用OPEN命令 - Supported参数

Supported 参数

parameters 参数可以是以下格式之一:

hostname
(hostname{:port{:mode{:terminators{:ibufsiz{:obufsiz{:queuesize{:keepalivetime}}}}}}})

parameters 参数中的参数如下:

  • hostname - 可选 — IP 主机的名称、IPv4 协议格式的 IP 地址或 IPv6 协议格式的 IP 地址。指定为带引号的字符串。客户端 OPEN 需要主机名;对于服务器端 OPEN,省略(由占位符冒号表示)。

  • port - 可选 — 如果存在,这是用于连接的 TCP 端口号。如果此端口号为空或省略,则端口号从设备名称的数字部分派生。该参数可以是十进制的端口号,也可以是服务名,提交给本地系统的TCP服务名解析器。

  • mode - 可选——用引号括起来的字母代码字符的字符串。字母代码可以按任何顺序指定;由于 IRIS按从左到右的顺序执行字母代码,因此字母代码之间的交互在某些情况下可能决定首选顺序。默认为数据包模式。模式字符串可以由以下一个或多个字母代码组成:

    • A-接受模式。如果A处于打开状态,则在接受来自客户端作业的连接后,服务器上的初始读取将立即以零长度字符串终止。
0
0 103
文章 姚 鑫 · 十一月 10, 2024 3m read

第十七章 TCP 客户端 服务器通信 - 使用OPEN命令

使用OPEN命令

OPEN命令保留一个TCP绑定设备供使用。其语法为:

OPEN devicename:parameters:timeout:mnespace
  • devicename - 一个|TCP|格式的字符串,后面跟着一些数字数字。设备名称的数字部分称为设备标识符。如果OPEN参数中没有指定端口号,则该设备标识符必须是唯一的5TCP端口号。如果在OPEN参数中指定了端口号(这是首选的实践),这个设备标识符可以是任何唯一的数字(最多2147483647),只要单个作业使用的所有TCP设备名称是不同的。

  • parameters - 可选-一系列一个或多个设备参数,用括号括起来,用冒号()分隔。如果省略了某个参数,请为缺少的参数指定冒号分隔符。(对于服务器端OPEN,始终省略第一个参数。)。具体参数说明如下。

    如果只指定第一个参数(hostname),可以省略括号。例如客户端open: open "|TCP|7000":"127.0.0.1":10。如果不指定参数,则可以省略圆括号,但必须保留冒号作为分隔符。例如:服务器端open: open "|TCP|7000"::10

  • timeout - 可选- IRIS尝试打开TCP设备的最大秒数。如果在此间隔内没有成功,它会将$TEST设置为0,并将控制权返回给进程。

0
0 113
文章 姚 鑫 · 十一月 9, 2024 3m read

第十六章 TCP 客户端/服务器通信

TCP 客户端/服务器通信

本章介绍如何使用 TCP/IPIRIS 数据平台进程之间设置远程通信。

IRIS 支持两种互联网协议 (IP):TCPUDP。这些 Internet 协议允许 IRIS 进程与本地或远程系统上的进程通信,无论这些进程是否正在运行 IRIS

  • TCP IRIS 传输控制协议 (TCP) 绑定。在服务器和单个客户端之间建立双向连接。提供具有错误检查和纠正以及消息确认的可靠字节流数据传输。
  • UDP IRIS 用户数据报协议 (UDP) 绑定。提供服务器和大量客户端之间的双向消息传输。 UDP 不是基于连接的;每次传输数据包都是一个独立的事件。为本地数据包广播和远程多播提供快速和轻量级的数据传输。本质上不如 TCP 可靠。不提供消息确认。

TCP 绑定将 IRIS 连接到广泛的网络标准,这样 IRIS 用户就可以通过 I/O 命令使用底层网络协议的基本功能。

TCP/IP 协议允许系统进行通信,即使它们使用不同类型的网络硬件。例如,TCP 通过 Internet 连接在使用以太网的系统和使用令牌环的另一个系统之间传输消息。 TCP 控制数据传输的准确性。 IPInternet 协议在网络或 Internet 上的不同系统之间执行实际数据传输。

使用 TCP 绑定,可以创建客户端-服务器系统的客户端和服务器部分。

0
0 105
文章 姚 鑫 · 十一月 8, 2024 4m read

第十五章 IRIS 进程之间的通信

本页介绍如何在两个或多个 IRIS 数据平台进程之间建立通信。

介绍

作业间通信 (IJC) 设备是一组特殊设备编号,可让在两个或多个 IRIS 进程之间传输信息。这些流程可以是作业流程或交互式流程。

IJC 设备成对工作。最多可以有 256IJC 设备对。使用称为接收器的偶数设备来读取数据。使用称为发送器的奇数设备来写入数据。尝试从发送器读取或写入接收器会导致 <NODEV> 错误。

可以向 IJC 设备发出 I/O 命令,就像向任何其他设备一样。向设备发出OPEN和USE命令后,进程可以发出:

  • 向接收器设备读取命令
  • 将命令写入发送器设备

一次只能有一个进程可以打开设备。

对基于 IRIS 设备表中映射的相对顺序,可以使用管理门户的配置选项查看和编辑该表。

每对设备都与一个 IJC 内存缓冲区关联。当进程向任何奇数 IJC 设备发出WRITE命令时 IRIS 会将数据写入该设备对的缓冲区中。当另一个进程向该对中的偶数设备发出READ命令时 IRIS 会从同一缓冲区读取数据。

写入的数据以先进先出的方式缓冲在内存中。如果在设备为空时发生READ ,则发出该信号的进程将挂起,直到另一个进程发出相应的WRITE 信号。缓冲区已满时发生的写入将挂起,直到另一个进程从该缓冲区读取数据。

将消息写入缓冲区后,即使关闭发送器,它也会保留在那里直到被读取。

0
0 95
文章 姚 鑫 · 十一月 7, 2024 3m read

第十四章 本地进程间通信(管道) - 用于进程间通信的 CLOSE 命令

用于进程间通信的 CLOSE 命令

如果使用带Q (/QUEUE) 参数代码的OPEN创建子进程,则该子进程可能会在设备上的CLOSE操作中继续存在。排队的进程间通信管道的生存能力取决于平台。在 UNIX® 系统上,子进程始终在CLOSE后继续存在。在 Windows 系统上,进程的生存取决于进程的年龄。刚刚启动的子进程不会在CLOSE操作中幸存,但是一旦子进程完全建立,它就会在 CLOSE操作中幸存。

UNIX® 系统上,可以指定关闭管道命令设备时CLOSE命令应等待的时间。超时默认值为 30 秒。可以通过指定OPEN命令closetimeout位置参数来修改此默认值。可以通过指定可选的“I”位置参数来覆盖CLOSE命令的默认或指定超时。 “I”参数指定立即关闭(1 秒后关闭)。 CLOSE语法如下:

CLOSE cpipename:"I"

使用命名管道与 Visual Basic 进行通信

Windows 上,在 IRIS 中使用命名管道就像使用 TCP 设备一样,但使用设备名称|NPIPE|nnn而不是|TCP|nnnOPEN参数如下:

OPEN "|NPIPE|3":(server:pipename)

其中server是计算机名称, pipename是要连接到的管道的名称。

0
0 120
文章 姚 鑫 · 十一月 6, 2024 2m read

第十三章 本地进程间通信(管道) - 用于进程间通信的 READ 命令

用于进程间通信的 READ 命令

语法

READ:pc readargument,...

READ 从管道读取数据。

其中reargument可以是:

formatting-mode
string
variable:timeout
*variable:timeout
variable#n:timeout

I格式化模式参数与管道一起使用。 I 参数允许对命名管道发出定时READ,而不会丢失跟随在一个部分记录中的任何数据。错误。当在READ上使用此参数时, READ会忽略消息。

默认情况下,I格式化模式的值处于关闭状态。如果在没有超时的情况下在READ命令中包含此参数,则进程将挂起,直到有数据要处理。

CPIPE 退出代码

可以检索命令管道 (|CPIPE|) 进程的退出代码。必须在 |CPIPE| 之前检索此退出代码设备已关闭。它是通过%SYSTEM.Process 类的PipeExitCode方法获得的。退出代码始终是整数值。如果退出代码不可用,该方法将返回空字符串并设置状态参数和解释,如以下示例所示:

  SET exitcode=$SYSTEM.Process.PipeExitCode(device, .status)
  IF exitcode="" {DO $SYSTEM.
0
0 92
文章 姚 鑫 · 十一月 5, 2024 2m read

第十二章 本地进程间通信(管道) - OPEN 和 USE 命令关键字

OPENUSE 命令关键字

以下列表描述了用于使用OPENUSE命令控制进程间通信管道的关键字。

/IOTABLE[=name]

默认值:如果未指定名称,则使用设备的默认 I/O 转换表。

对应K\name\参数代码,为设备建立I/O转换表。

/TRANSLATE[=n]

默认值:1

与K参数代码相关。 /TRANSLATE/TRANSLATE= n (对于n的非零值)启用设备的 I/O 转换。 /TRANSLATE= n如果n值为零,则会禁用设备的 I/O 转换。

/XYTABLE[=name]

默认值:如果未指定名称,则使用设备的默认 $X/$Y 操作表。

对应Y\name\参数代码,为设备建立$X/$Y动作表。

仅限 OPEN 关键字

以下列表描述了仅使用OPEN命令控制进程间通信管道的关键字。

/ENV=environmentvars

指定要在新进程中设置的环境变量。有两种指定值的方法:

  • 明确地说。例如:
/ENV=(name1:value1,name2:value2)
  • 通过多维数组。例如:
 Set arr(name1)=value1
 Set arr(name2)=value2

// then later use the following in the OPEN command:
  /ENV=arr.
0
0 72
公告 Michael Lei · 十一月 3, 2024

各位社区成员,大家好!

我们很高兴推出一种全新的方式让您展示创造力和技能! 这次,我们邀请您参加我们首次发起的视频挑战:

📹 InterSystems 技术视频挑战 📹

请在 2024 年 10 月 21 日到 11 月 10 日提交与 InterSystems IRIS 产品或服务相关的任何主题的视频。

🎁 人人有礼 + 主要奖品!


0
0 127
文章 姚 鑫 · 十一月 3, 2024 2m read

第十章 本地进程间通信(管道) - 用于进程间通信的 OPEN 命令

用于进程间通信的 OPEN 命令

OPEN命令允许程序与 IRIS 外部的进程进行通信。

OPEN Arguments

cpipename 管道名称

仅命令管道— “|CPIPE|”或"|CPIPE|xxxxxx" ,其中xxxxxx表示用户指定的唯一标识符。

program 程序

命令管道可以使用命令 shell 或不使用命令 shell(直接)执行程序。在大多数情况下,首选不使用命令 shell 执行。标准管道使用命令 shell 执行程序。

仅命令管道— 要在不使用命令 shell 的情况下执行,请指定 /COMMAND= program 。如果程序有参数,则必须使用 /ARGS 关键字指定它们。如果指定 /COMMAND/ARGS 关键字,则无需命令 shell 即可执行程序: (/COMMAND=program)(/COMMAND=program:/ARGS=arg1)(program:/ARGS=arg1)都是有效的语法。 /ARGS 可以采用单个参数、以逗号分隔的参数列表或数组。例如, (/COMMAND=program:/ARGS=arg1,arg2)

0
0 79
文章 姚 鑫 · 十一月 2, 2024 2m read

第九章 本地进程间通信(管道)

本页介绍如何通过管道与 IRIS® 数据平台外部的进程建立通信。

介绍

可以通过管道在 IRIS 进程和外部 UNIX®Windows 进程之间进行通信,就像在 UNIX®Windows 操作系统级别一样。可以将输出发送到管道或从管道接收输入。管道为单向;不能同时读取和写入同一个程序。

当打开另一个程序的管道进行输出时,可以像写入顺序文件一样对其进行写入。然后程序使用编写的内容作为其输入流。当希望 IRIS 进程与外部进程共享资源时,此功能特别有用。

打开 IRIS 实用程序的管道

可以打开通往 IRIS 实用程序以及 UNIX®Windows 进程的管道。在将管道用于实用程序 I/O 之前,系统管理员必须在 IRIS 系统上定义管道设备。

系统管理员定义管道设备后,当运行实用程序(例如^%RD )时,可以使用系统管理员定义的助记符回答Device:提示。输出会自动发送到该设备。

管道和命令管道

IRIS 支持标准管道和命令管道 (CPIPE)。标准管道用于相对较短的命令字符串,其中命令名称及其参数少于 256 个字符。当命令字符串长度为 256 个字符或更长时,使用命令管道。在这两种情况下,管道只能在 UNIX®Windows 系统上使用。

0
0 116
文章 姚 鑫 · 十一月 1, 2024 2m read

第八章 在 I/O 命令中指定设备 - 通过 IRIS ID 指定设备

通过 IRIS ID 指定设备

为了与其他 产品兼容并方便起见,可以通过设备编号(存储在设备表中)来引用设备。系统管理员可以使用管理门户将这些号码链接到设备。选择“系统管理” 、 “配置” 、 “设备设置” 、 “设备”以创建新设备或编辑现有设备。

系统管理员还可以将一个数字转换为另一个数字。因此,可以发出OPEN 47IRIS 会将其转换为OPEN 49

下表显示了设备编号。

IRIS 设备编号和设备

Device Numbers 设备编号 Devices 设备
0 主要设备(您登录的设备)。
2 IRIS 假脱机程序。 UNIX®:助记符 SPOOL 适用于该设备。
3 设备编号无效。尝试打开它会返回 <NOTOPEN> 错误,而不等待超时到期。
63 查看缓冲区。
20-46, 200-223 常规联锁装置。
224-255 作业间通信设备。

示例

要打开假脱机程序,请发出以下命令:

OPEN 2

指定磁盘上的文件

可以使用双引号括起来的操作系统文件规范来打开磁盘文件。

Windows 文件规范具有以下格式:

device:\directory\file.
0
0 94
公告 Claire Zheng · 十一月 1, 2024
您好,欢迎阅读 十月 2024 开发人员社区通讯。
统计信息
✓ 十月发布了 43 篇新帖子:
 37篇新文章
 5个新公告
 1个新问题

✓ 十月有 408 位新成员加入
✓ 所有时间发布了 2,251 篇帖子
✓ 所有时间有 2,431 位成员加入

0
0 89
问题 yang xin · 十一月 1, 2024

我们公司在和其他公司合作,需要从Cache2016的数据库中执行sql获取数据

 

sql的内容是调用存储过程

CALL DHCXXXXice.MKPIQuery_QueryXXXX('K007XXXX.JJR','2024-08-01','2024-08-01')

 

在java代码中执行会报错误如下

但是通过数据库连接工具却能查询到结果

 

通过数据库连接工具查询到 该存储过程,可接收参数为8个

尝试  CALL DHCXXXXice.MKPIQuery_QueryXXXX('K007XXXX.JJR','2024-08-01','2024-08-01',null,null,null,null,null)

在通过java连接查询时,依然报Parameter list mismatch错误

通过jdbc连接工具依然能查出结果

0
0 232
文章 姚 鑫 · 十月 31, 2024 2m read

第七章 在 I/O 命令中指定设备

当使用 I/O 命令OPENUSECLOSE在除正在使用的设备之外的任何设备上处理 I/O 时,必须指定一个 I/O 设备。可以根据设备类型以三种方式之一指定设备,如下表所示。

I/O 命令中指定设备

Type of Specification 规格类型 Use for these Devices 用于这些设备
IRIS 设备名称 Terminals and Printers 终端和打印机
IRIS 设备 ID 或设备别名 除顺序文件外的所有设备
File Name 文件名 Sequential Files 顺序文件

请注意,WindowsUNIX® 处理打印机I/O 的方式不同。有关详细信息,请参阅打印机。

按设备名称指定终端和打印机

如果的 I/O 操作是针对终端(或某些平台上的打印机),则可以使用操作系统(UNIX®Windows)应用的设备名称来指定设备。形式如下:

OPEN "device"  
USE "device"  
CLOSE "device"

其中device是设备的操作系统名称,用引号引起来。设备的最大长度为 256 个字符。

0
0 120
文章 姚 鑫 · 十月 30, 2024 2m read

第六章 主设备、当前设备、空设备

明确使用主设备

USE 0USE $principal向进程的主体设备隐式发出OPEN命令。如果另一个进程拥有该设备,则该进程会挂在隐式OPEN上,就像它遇到任何OPEN时一样。

为该进程不拥有的任何其他设备(由于先前的OPEN命令)发出USE命令会产生错误。

仅当进程获取设备时,没有超时的OPEN命令才将控制权返回给进程。可以通过键盘中断命令(如Ctrl-C )中断打开命令。由于保护问题或无效设备名称而无法成功的OPEN将永远挂起。当在OPEN命令中指定超时时, OPEN将在超时到期时将控制权返回给进程。

使用主设备的选项

根据主要设备的性质,可以指定其他特定于设备的参数,这些参数对于管道(进程间通信) 、文件和终端 I/O是不同的。例如,可以使用 TLS 连接打开主设备:

USE $principal:(::/TLS=ConfigName)

其中ConfigName是同一实例中定义的 TLS 配置的名称。

空设备

如果应用程序生成不希望出现在屏幕上的无关输出,可以将该输出定向到空设备。可以通过发出带有适当参数的 IRIS OPEN命令来指定空设备(见表)。 IRIS 将其视为虚拟设备。

空设备参数

Platform 平台 Null Device Argument 空设备参数
UNIX® /dev/null/
Windows //.
0
0 106
文章 姚 鑫 · 十月 29, 2024 2m read

第五章 主设备、当前设备、空设备

一个进程拥有一台设备

一次只有一个进程可以拥有一个设备,顺序文件除外。

换句话说,在进程成功向设备发出OPEN命令后,在第一个进程释放该设备之前,其他进程都无法打开该设备。进程通过以下任一方式释放设备:

  • 通过显式发出CLOSE命令。

  • 通过停下来。

每个进程都有一个主设备

每个 IRIS 进程都有一个主要输入设备和一个主要输出设备。默认情况下,这些是同一设备。当您登录终端并激活 IRIS 时,该终端将成为主要设备。由于 IRIS 隐式向该终端发出OPENUSE命令,因此可以立即向它发出READWRITE命令。 IRIS 主设备是操作系统指定为主输入设备的设备。 $PRINCIPAL特殊变量包含主设备的设备 ID

IRISI/O 命令定向到当前设备

IRIS 将输入和输出操作(包括READWRITEPRINTZLOAD命令)定向到当前设备。 $I特殊变量包含当前设备的设备 ID。当在终端上登录 IRIS 时, $IO最初包含终端的设备名称。换句话说,登录后,主设备和当前设备是相同的。在发出USE命令后,当前的设备( $IO中包含的设备)通常是执行的最后一次USE命令中指定的设备。

尽管可以在编程器模式下对主设备以外的设备发出OPENUSE ,但每次 IRIS 返回到>提示符时,它都会隐式发出USE 0

0
0 155