1 关注者 · 994 帖子

  

InterSystems Caché 是一个多模型 DBMS 和应用服务器。

查看此处提供的更多详细信息

文档

文章 姚 鑫 · 十月 17, 2022 3m read

第十九章 CSP Session 管理 - %CSP.Session 对象

对象中的 %CSP.Session 包含有关当前Session的信息以及以编程方式控制会话各个方面的方法。

User Session Data

可以使用其 Data 属性将 中的应用程序特定信息存储在对象中。数据是一种多维数组属性,可让关联多维数组中的特定信息。该数组的内容会在会话的整个生命周期内自动维护。

可以像使用任何其他 ObjectScript 多维数组一样在对象 属性中使用 %CSP.Session

例如,如果在 方法中执行以下代码:

 Set %session.Data("MyData") = 22

然后对同一会话的后续请求(无论哪个类处理请求)在对象中的 中看到此值:

注意:理解为全局变量。

在 中存储应用程序特定数据的能力是一项非常强大的功能,但应该正确使用。进一步讨论请参阅“状态管理”部分。

设置用户数据 - 设置命令

要在对象的 %CSP.Session 中存储数据(仅文字数据 — 不是对象引用),请使用 数组中的每个节点都可以包含最多 个字符的字符串。

 Set %session.Data("MyData") = "hello"
 Set %session.Data("MyData",1) = 42
0
0 129
文章 姚 鑫 · 十月 16, 2022 4m read

第十八章 CSP Session 管理 - 与 CSP.Session 的Sessions

`` 是一种无状态协议;每个请求都不知道以前的请求。虽然这适用于为用户提供简单静态内容的网站,但它使得开发交互式动态 Web 应用程序变得困难。为了解决这个问题,CSP 提供了所谓的Session 管理。

与 的

Session 话表示在特定时间段内从特定客户端到特定应用程序的一系列请求。

CSP 自动提供会话跟踪;无需执行任何特殊操作即可启用它。 CSP 应用程序可以通过对象中的 %CSP.Session 查询和修改其会话的各个方面。 服务器通过 变量使该对象可用。

Session 会话创建

当 客户端向 CSP 应用程序发出第一个请求时,会话开始。

创建新session时, 服务器会执行以下操作:

  1. 创建一个新的会话 号。
  2. 酌情执行许可检查。
  3. 在对象(持久)中创建 的新实例。
  4. 调用当前事件类(如果存在)的 OnStartSession 方法。
  5. 创建一个 以便在会话过程中跟踪来自 客户端的后续请求。如果客户端浏览器禁用了 , 会自动使用 重写(在每个 中放置一个特殊值)来跟踪。

对于的第一个请求,对象中的 的 属性设置为 。对于所有后续请求,它设置为 :

0
0 189
文章 姚 鑫 · 十月 15, 2022 2m read

第十七章 CSP 中的 HTTP 请求 - %CSP.Response 对象和 OnPreHTTP 方法

%CSP.Response 对象和 OnPreHTTP 方法

可以使用对象中的 %CSP.Response 控制将哪些响应标头发送回 HTTP 客户端。 CSP 服务器自动创建此类的一个实例,并将对它的引用放在变量 中。

由于 对象控制 标头,因此通常在类中的 %CSP.Page 的 方法中设置其属性。例如,要重定向传入的 请求,请定义以下 方法:

Class MyApp.Page Extends %CSP.Page
{
// ...

ClassMethod OnPreHTTP() As %Boolean
{
    Set %response.ServerSideRedirect = "C:\CacheSys\csp\samples\redirect.csp"
    Quit 1
}
}

如果使用 CSP 类创建 CSP 页面,请使用以下代码设置标题值:

Class MyPage Extends %CSP.Page
{
ClassMethod OnPreHTTP() As %Boolean
{
    Do %response.SetCookie("name","value")
    Quit 1
}
0
0 124
文章 姚 鑫 · 十月 14, 2022 3m read

第十六章 CSP 中的 HTTP 请求 - %CSP.Request 对象

%CSP.Request 对象

CSP 服务器响应 HTTP 请求时,它将有关传入请求的信息打包到对象中的 %CSP.Request 实例中。可以使用变量 来引用此对象。

URL 属性

要查找传入 请求的 (不包括查询字符串),对象中使用 %CSP.Request 的 属性:

 Write "URL: ", %request.URL

数据属性和 参数

可能包含参数列表(也称为 查询)对象中的 通过其 属性使这些可用。

例如,假设传入的 URL 包含:

/csp/user/MyPage.csp?A=10&a=20&B=30&B=40

可以使用以下命令在服务器上检索这些参数:

 Write %request.Data("A",1)    // this is 10
 Write %request.Data("a",1)    // this is 20
 Write %request.Data("B",1)    // this is 30
 Write %request.Data("B",2)    // this is 40
0
0 194
文章 姚 鑫 · 十月 13, 2022 2m read

第十五章 CSP 中的 HTTP 请求 - 处理 CSP 错误

处理 CSP 错误

%CSP.Error是默认的 CSP 错误页面。将其用作创建的任何错误页面的超类。可以使用 %CSP.Error中提供的功能从错误中提取信息。

在授予许可证之前处理 错误

如果已经有一个现有会话并且用户尝试转到一个未找到的页面, 将显示标准错误页面,因为该会话已经有一个许可证。

如果 CSP 应用程序还没有许可证,并且发生以下任何错误,则 CSP 默认显示标准 Web HTTP/1.1 404 Page Not Found 错误消息。可以通过在错误页面(通常是 %CSP.Error的子类)上为应用程序设置以下参数来更改在授予许可之前遇到错误时显示的页面。

如果生成以下错误,CSP 会查看 参数的值:

Cannot grant license.

可以有以下两个值:

  • "" — 返回 HTTP/1.1 404 Page Not Found 错误(默认)

  • 静态 HTML 页面的路径 — 显示命名的静态页面,例如 /csp/samples/static.html

如果生成以下任何错误, 会查看 参数的值:

可以有以下三个值:

  • — 返回 错误(默认)
  • 1
0
0 252
文章 姚 鑫 · 十月 12, 2022 3m read

第十四章 CSP 中的 HTTP 请求 - CSP.Page 类

CSP 服务器上,所有 HTTP 请求都通过调用由类中的 %CSP.Page 定义的方法来处理。类中的 从不直接处理请求本身;它只是定义了处理 请求所需的接口。实际的事件处理的 的子类完成(手动创建或作为处理 源文件的结果)。

%CSP.Page 的子类永远不会被实例化;也就是说,不会在对象中创建 %CSP.Page%CSP.Page 定义的方法都是类方法,不需要对象即可调用。正如我们将看到的,这些方法所需的任何状态信息都由 服务器管理的其他对象(例如 和对象中的 )提供。

Page 方法

在 服务器确定类中的哪个 %CSP.Page 应该处理请求后,它会设置适当的处理上下文,然后调用该类的 Page 方法。设置处理上下文包括重定向标准输出设备 (),以便将所有输出(使用 命令)发送回 客户端并创建任何所需对象的实例(例如 、 和 对象)或局部变量。

方法处理对 请求的完整响应。它通过按顺序调用回调方法 、 和 来做到这一点。这些被称为回调方法,因为子类可以覆盖它们以提供自定义行为。

方法负责写出 响应的标头。这包括内容类型和 等信息。默认行为是将内容类型设置为 。在需要更直接地控制响应标头的情况下,通常只需要覆盖 方法。

方法执行响应 请求的大部分工作。

0
0 266
文章 姚 鑫 · 十月 11, 2022 3m read

第十三章 CSP 中的 HTTP 请求 - CSP 服务器事件流

CSP 服务器收到来自 CSP 网关的请求时,它会确定该请求是针对静态页面还是针对 CSP 类的。如果是静态页面,它会立即将页面发回。如果是针对 类,它会执行以下操作:

  1. 确定此请求属于哪个会话。如果没有,它会启动一个新会话。
  2. 确保在正确的 Caché 命名空间中处理请求。
  3. 确保对象中正确的 %CSP.Session可用,并根据 请求中包含的信息在对象中创建 %CSP.Request 的实例。如果需要任何解密,它也会这样做。
  4. 构造 对象以允许应用程序修改响应标头。
  5. 确定应由哪个类处理请求并调用其 方法(该方法又调用 回调方法)。

CSP 服务器 URL 和类名称解析

服务器通过解释其 来确定将 HTTP 请求分派到哪个类。 将 分解为以下组件:

Component Purpose
http:// 协议
localhost 网络服务器地址
[] 可选, 服务器正在运行的端口号;默认为端口
/csp/samples/ 目录
文件名和扩展名
查询

协议和服务器地址由 服务器处理,与 服务器无关。该目录用于确定 URL 引用的 应用程序。每个 配置都可以定义多个 应用程序,这些应用程序由 的目录部分标识。每个

0
0 152
文章 lizw lizw · 九月 28, 2022 12m read

简单分享下在医院实际业务过程中%Dictionary.CompiledClass的一些应用。
一,Query查询出来的数据直接存表。
       我们经常会遇到一些突如其来的检查,如:飞行检查,审计检查等等,往往一下子要查询几年的各种数据,每种数据涉及字段还非常多,数据之间还要求对上,查询耗时长,数据对比难度大,此时,我们需要把查询出来的数据直接存到临时表,数据核对和修改直接在临时表中完成,核对好的数据直接在sqldbx或者水滴等查询工具中整表导出,效率会高一些。
       具体实现:按照数据要求,把表建好,Query输出字段和表字段顺序一致,按日期每天调用Query查询和插入,记录异常数据,后续单独处理。
       优点:效率明显提高,数据核对和修改、导出很方便,避免了数据量大,多次查询耗时长问题。
       缺点:数据量大会占用存储,记得删。
// W ##CLASS(lizw.CloseCycleData).insertDayByDay("2022-01-01","2022-06-30")
ClassMethod insertDayByDay(sd, ed)
{
    k ^tmplzw("insertFromQyeryTestpara",$j)
    S classOBJ=##class(%Dictionary.CompiledClass).%OpenId("lizw.

1
0 572
文章 聆严 周 · 九月 27, 2022 6m read

背景

Cache起源于没有SQL的1970时代,当时各种高级计算机语言才刚刚诞生,其中M语言较为独特,它的诞生就是为了在没有操作系统的机器上,进行数据存储。别忘了,Unix在1971年才发布。M语言别具一格地采用了Global多维数组,统一了复杂的内存操作和文件读写,使之成为了1970年代数据库的事实标准,特别是在医疗行业。而后Intersystems在1978年接过M语言的旗帜,在M语言上添加了SQL兼容层和ObjectScript层,前者顺应了时代的潮流,后者不仅为M语言提供了强大的OOP和各种便捷的语法糖,还让数据能以对象形式进行访问,让数据和代码更加紧密。

本文将简述多维数组、SQL、对象这3种数据操作方式,提供实例代码片段,并在运行效率、开发效率、管理效率、实用性方面讨论它们的优缺点。 为方便讨论,以学校与学生为例。对每种操作方法,都列举3种典型的用例,分别为,访问某特定ID的学生(即数据库ID索引)、访问某特定studentID的学生(即遍历唯一索引)、和访问某学校的所有人(即遍历非唯一索引)。

3
2 1293
文章 姚 鑫 · 十月 10, 2022 3m read

第十二章 CSP 中的 HTTP 请求 - CSP 运行时环境

CSP 的主要任务是提供动态内容以响应传入的 (超文本传输协议)请求。本节介绍 CSP 如何处理 请求的基础知识。

是一种简单的协议,其中客户端向服务器发出请求。 是一种无状态协议;客户端和服务器之间的连接只持续为服务请求所需的时间。每个 HTTP 请求都包含一个请求标头,该标头指定请求类型(例如 或 )、一个 和一个版本号。请求还可能包含附加信息。 自动确定它应该处理哪些 请求,将它们分派到运行在 服务器上的适当类,并将请求信息打包成易于使用的对象(例如对象中的 )。

CSP 运行时环境

下图显示了 和 请求的架构:

应用程序的运行时环境包括以下内容:

  • HTTP 客户端(例如 Web 浏览器)
  • HTTP 服务器( 服务器,例如 或 )
  • 网关( 服务器的 Caché 插件)
  • 服务器( 服务器在其上运行请求的 应用程序)

HTTP 请求处理

下图说明了 处理 请求时的事件流:

  1. 浏览器(或类似的 客户端)发出 请求。
  2. 服务器确定这是一个 请求并将其分派到 网关(安装在 Web 服务器上)。 2a 服务器可能会提供静态内容,具体取决于应用程序配置。
  3. 网关重新打包请求并将其发送到正确的缓存服务器。
0
0 182
文章 Nicky Zhu · 十月 10, 2022 4m read

在生产环境中IRIS通常以故障转移集群的形态被部署,而集群中各故障转移成员的镜像状态将决定该集群在故障发生时是否能够顺利切换保障业务不中断。因此,成员状态通常也是运维团队需要巡检或监控的目标。

尽管IRIS内部API提供了丰富的集群配置、成员状态监控等一系列接口,但除Portal上的镜像监视器外,并没有特定的接口便于从外部系统访问(如进行企业级监控集成时),也没有整合好的监控接口可用与获取镜像的健康状态。但在IRIS上开发一个REST接口暴露镜像状态数据并不困难,如下所示:

Include %syMirrorClassParameter

在该实现中,由于需要调用%SYS下的API,因此需要在执行过程中切换到%SYS命名空间,并在执行完毕后切换回原命名空间。

0
0 340
文章 Liu Tangh · 十月 9, 2022 3m read

Cache软件自带数据服务和应用服务。在实际使用中会将Cache数据服务和应用服务分别安装在不同的服务器上面,作为数据库服务器和应用服务器。数据库服务器和应用服务器通过ECP(企业缓存协议)进行数据交换。在应用服务器部署上web服务,让数据交换和应用处理分开,实现瘦数据和胖应用的系统模式。

这种早已存在于互联网行业的基础级模式,虽然解决计算资源和存储资源的合理分配的问题,但也常用来扩展了用户许可数。毕竟将数据服务和应用服务装在一台服务器上面只能满足百级的用户需求,而将数据服务和应用服务分开的二层模式,就可以满足千级的用户需求。

在二层模式下,大量用户必须访问同一个应用源地址,才能在日常繁杂的应用维护中,减少维护的成本。这样,就在所有的应用服务器和客户端之间,加上了负载均衡,这种网络服务器。它通过SNAT发布的虚拟地址,满足了上面的需求。

但同时,也将客户与应用服务器的直接对话,替换成了,负载均衡服务器与客户端,和负载均衡服务器与应用服务器段的通话。

              

在客户端访问负载均衡的虚拟地址的时候,通过网络的三次握手协议建立连接。

在负载均衡确认了客户端的真实性后,负载均衡再与应用服务器,也是通过网络的三次握手协议,建立连接,将应用服务器作为负载均衡的服务器池成员。再将客户端的数据转发到应用服务器。

这个看似满足解决了当下所有应用需求的方案,也存在的些不确定。

3
1 500
文章 姚 鑫 · 十月 9, 2022 3m read

第十一章 CSP 架构 - Web Application Settings

Special Case: DeepSee

对于使用 DeepSeeWeb 应用程序,它需要访问 %DeepSee 包中的所有类。要使特定应用程序能够使用 ,请在 命名空间中使用以下命令:

Do EnableDeepSee^%SYS.cspServer("/csp/webapp/")

其中 是带有斜杠的 应用程序名称。前面的命令等价于以下命令:

Set ^SYS("Security","CSP","AllowClass","web-app-name","%DeepSee.") = 1
Set ^SYS("Security","CSP","AllowClass","web-app-name","%CSP.UI.Portal.About")=1

其中 是带有尾随冲突的 Web 应用程序的名称。请注意,第一行使用 。有一个尾随句点。

或者,要使所有应用程序都能使用 ,请使用以下变体:

Do EnableDeepSee^%SYS.cspServer(0)

例如,要启用 /csp/webapp Web 应用程序以使用 ,请使用以下命令:

要禁止特定 应用程序使用 DeepSee,请使用以下命令:

编辑 应用程序设置

可以在管理门户的编辑 应用程序页面上创建或修改 如何处理特定

0
0 184
文章 姚 鑫 · 十月 8, 2022 2m read

第十章 CSP 架构 - Category

Category: AllowPrefix

如果应用程序依赖于调用以同一组字符开头的多个类或包,请使用AllowPrefix选项。

重要提示:如果应用程序依赖于调用上面列出的以外的任何类,则使用它可能是不安全的。建议确定是否需要调用此类,并为部署执行风险评估,以便了解使类可用的含义。

要使给定的Web应用程序能够调用以相同字符集开头的类或程序包,请在命名空间中使用以下命令:

Set ^SYS("Security", "CSP", "AllowPrefix", "web-app-name", "prefix") = value

其中

  • Web-app-nameWeb应用程序的名称,后跟一个尾随斜杠。

要使所有Web应用程序都能使用给定的类或包,请将web-app-name指定为;在这种情况下,可以省略括起来的引号。

  • 前缀是名称的前几个字符。

  • 值为10

如果将其指定为1,则Web应用程序可以调用这些类(或包)。

如果将其指定为,则此Web应用程序无法调用这些类(或包)。

例如,要使应用程序能够调用整个包,请使用以下命令:

请注意,前缀是 ,前缀中的句点表示应用程序无法访问等包。但是,应用程序可以访问包和。

再举一个例子,要使所有应用程序都能够访问以开头的所有包,请使用以下命令:

再举一个例子,假设 应用程序应该能够访问 % 包中除类

0
0 158
文章 姚 鑫 · 九月 25, 2022 78m read

IRIS的23种设计模式

第一章 Caché 设计模式 简单工厂模式

定义

  • 简单工厂模式属于创建型模式,又可称为静态工厂模式,这是由一个工厂对象决定创建出哪一种产品类的实例

使用场景

  • 工厂类负责创建的对象比较少
  • 客户只需知道传入工厂类的参数,而无须关心创建对象的逻辑

优点

  • 使用户根据参数获得对一个的类实例,避免了直接实例化类型,降低了耦合性
  • 能把客户类和具体子类的实现解耦,客户类不再需要知道有哪些子类以及应当实例化哪个子类:客户类往往有多个,如果不使用简单工厂,那么所有的客户类都要知道所有子类的细节。而且一旦子类发生改变,所有的客户类都要进行修改

缺点

  • 可实例化的类型在编译期间已经被确定。
  • 如果增加新类型,则需要修改工厂,这违背了开放封闭原则
  • 子类多过不适合使用

示例

  • 用Caché 实现一个计算器控制台程序,要求输入两个数和运算符号。

可能会写成这样:

/// w ##class(PHA.YX.Design.Program).GetResult() 
ClassMethod GetResult()
{
	READ "输入第一个数字:", numberA,!
	READ "输入操作符:", operate,!
	READ "输入第二个数字:", numberB,!
	
	s result = ""
	i operate = "+" d
	.s result = numberA + numberB
	i operate = "-" d
	.s result = numberA - numberB
	i operate = "*" d
	.s result = numberA * numberB
	i operate = "/" d
	.s result = numberA / numberB
	
	q result
}

2
1 489
文章 姚 鑫 · 十月 7, 2022 4m read

第九章 CSP 架构 - CSP 应用程序设置

CSP 应用程序设置

CSP 服务器接收到传入的 HTTP 请求时,它使用本地 CSP 应用程序设置来确定如何处理请求。本节介绍 如何使用 应用程序设置处理 应用程序请求。

启用对 页面的应用程序访问

以下规则管理对页面和类的访问:

  1. 默认情况下,允许用户应用程序访问以下页面:
  • 允许 /csp/sys/ 应用程序及其所有子应用程序的页面
  • 允许使用 isc/studio/templates//isc/studio/usertemplates/ 应用程序的页面
  1. 默认情况下,允许用户应用程序访问所有非 % 类
  2. 用户应用程序还可以访问以下类:
  • %CSP.Broker, , %CSP.Login, , 被允许
  • 和 是允许的,有以下附加条件
    • 不允许所有其他 %ZEN.*
    • 允许所有其他 %Z*
  • 允许所有 类

除了检查 应用程序中的设置外,还会检查允许的类。可以通过导航到管理门户上的系统管理 > 安全 > 应用程序 > Web 应用程序来查看和更改应用程序设置。因此,类引用必须通过两组测试才能被允许。

要允许访问其他类,请在 命名空间中配置 ,其中 是 、 或 。以下部分描述了这些选项

重要提示:首先应用默认规则,然后按列出的顺序应用类别来完成检查。此外,每个关键字都可以被多次调用。

0
0 195
文章 bai hongtao · 十月 7, 2022 4m read

在Cache 2018之前的版本中,数据库的高可用是通过第三方HA软件保障的,Cache数据库在2018以后及IRIS支持MIRROR技术,通过MIRROR可以保障数据库的高可用及数据的冗余,那么在新版本中,第三方HA软件与MIRROR是否可以同时使用以实现更高的数据库可用性?使用起来有哪些需要注意的?本文重点介绍探讨上述两个问题。

为得出正确结论,我们搭建了如下实验环境:

       我们采用3个服务器节点A、B、C分别部署IRIS 2021.1数据库,其中A节点、B节点部署第三方HA软件组成数据库高可用主备集群(本例中,采用的是基于POWER平台的PowerHA),该集群中定义A节点为主节点,B节点为备用节点,HA集群的共享资源组存放在共享SAN存储上,通过HA,生成HA集群的对外服务IP,即我们通常说的Service ip,保证在生产节点发生网络故障、主机故障、以及操作系统故障、手动切换等情况下,IRIS服务、共享资源组、以及HA的Service IP可自动切换至另外一台服务器,保障IRIS高可用,经测试,HA集群内部节点间服务切换时间约为30秒。

0
0 612
文章 姚 鑫 · 十月 6, 2022 4m read

第八章 CSP 架构 - CSP 网关配置

CSP 网关配置

CSP 网关是安装在 Web 服务器上并由其加载的 DLL 或共享库。 网关检测对扩展名为 或 的文件的任何请求,并将它们发送到定义的 服务器进行处理。

CSP 网关管理器

可以使用 网关管理器( 网关管理页面)或直接编辑其配置文件 csp.ini 来配置 网关。

网关管理器是一个小型 应用程序,可以在浏览器中使用它。您可以通过导航到系统管理 > 配置 > CSP 网关管理来访问 网关管理器。默认情况下,它会访问专用 服务器的 网关管理器。

要访问生产 服务器的 网关管理器,请根据需要通过替换 或 localhost:<port_no> 来更改 。

有关配置 网关的信息,请导航至系统管理 > 配置 > CSP 网关管理,然后单击帮助。有关更多详细信息,请参阅 网关配置指南。

注意:CSP Web 网关管理页面的本地化仅基于安装的 的内容(如果有)。如果不存在本地化文件,则 管理页面默认使用嵌入的英文文本。浏览器的语言设置对此机制没有影响。

定义服务器访问

注意:为防止运行时错误,对于通过 运行的高可用性配置, 建议使用启用了粘性会话支持的硬件负载平衡器。

可以定义此 网关可以访问的服务器列表(可能运行 CSP 应用程序的

0
0 144
问题 Liang Jianhui · 九月 30, 2022

访问了一个API,得到的返回结果里面有个时间字段,现在返回的格式是这样的 “2022-09-30T07:24:57.899Z”, 怎么样能转换成 YYYY/MM/DD hh:MM:ss的格式

1
0 250
文章 姚 鑫 · 十月 5, 2022 3m read

第七章 CSP 架构 - URL 的 Web 服务器配置

URLWeb 服务器配置

提供了一个默认的 /csp 虚拟目录来运行 应用程序。如果正在运行多个 Caché 实例,它还提供了一个默认虚拟目录 以供使用。如果正在运行多个 实例并使用虚拟目录 访问 应用程序,而之前没有 /,它将访问最后安装的 版本。如果计划允许使用以 http://localhost/csp 或 http//localhost/cacheinstance/csp 开头的应用程序路径调用所有 应用程序,则无需在 Web 服务器中进行任何更改配置。

如果要创建一个应用程序路径不是以 或 开头的 CSP 应用程序,则需要在 服务器配置文件条目中进行更改,别名 。

下表显示了需要更改的配置文件。

网络服务器 配置文件
ApacheHP 安全网络服务器 UNIX®: Windows: \conf\httpd.conf
如“在 服务器上配置新 ”中所述定义虚拟目录。

下表显示了使用 服务器和 实例的组合访问 页面的示例:

URL web server Instance
http://localhost/cache20071/csp/samples/menu.csp public
0
0 198
文章 姚 鑫 · 十月 4, 2022 3m read

第六章 CSP 架构 - 静态文件

静态文件

数据库服务器为所有 CSP 提供服务。 数据库服务器还可以通过 CSP 网关为 Web 应用程序提供任何类型的静态文件。在标准 应用程序中, 服务器通常提供静态内容。要在 上运行 应用程序,必须配置 服务器以允许服务器通过 网关提供所有静态文件。

注意:要运行基于 Zen 的应用程序,请启用“服务文件”选项并配置 Web 服务器以允许 服务器提供静态文件。然后 框架将能够提供依赖图像和 帮助文档。

指示字符编码

引擎通过流服务器以与主流 Web 服务器一致的方式处理静态文件,以确定 文件的字符编码。

现代惯例是将所有 文件标记为 的 ,并且确保页面上使用的所有 文件都是这种情况。

以这种方式标记的 文件:

  • 如果文件包含 (字节顺序标记),浏览器会自动检测到这一点并使用正确的字符集来读取它。
  • 如果该文件不包含 ,则浏览器假定该文件是 。

如果需要覆盖此行为以指定 JavaScript 文件的字符集,请将全局 设置为列表值 。例如,

SET ^%SYS("CSP", "MimeFileClassify", "JS") = $listbuild("text/javascript", 0 ,"ISO-8859-1") 
0
0 144
文章 姚 鑫 · 十月 3, 2022 2m read

第五章 CSP 架构 - 组件,信息流

CSP 组件:Web 服务器、CSP 网关、 服务器

使用三个软件组件: 服务器、CSP 网关和 服务器(在 服务器上运行):

  • CSP 组件

服务器和CSP服务器可以由一台或多台计算机实现。在开发过程中,所有三个组件(Web 服务器、 网关和 服务器)可能都位于一台 上。在大规模部署中,可能有多个 服务器和 服务器采用两层或三层配置。

这些组件( 服务器、 网关、 服务器)视为各有一个。它将 描述为好像只提供 页面,尽管 也可以提供 页面,以及其他文本格式和二进制格式,例如图像。

每个组件的作用

服务器是一个软件实用程序,它执行以下操作:

  • 接受传入的 HTTP 请求,通常来自浏览器
  • 检查权限
  • 可以提供静态内容
  • CSP 网关发送对 内容(以 或 结尾的 )的请求

CSP 网关是一个共享库、一个 文件或一个 脚本。它执行以下操作:

  • 确定将请求发送到哪个 服务器。
  • 将请求发送到正确的 服务器。
  • 维护与 服务器的连接(以避免必须不断打开新连接)。

服务器是一个运行在 服务器上的进程,专门用于处理来自 网关的请求。它执行以下操作:

  • 接收应用程序的 请求
  • 检查应用程序配置设置(在管理门户中设置并保存在 文件中)。
0
0 206
文章 姚 鑫 · 十月 2, 2022 2m read

第四章 Caché 服务器页面简介 - 通过 html 创建 csp 页面

创建基于 HTML 标记的 CSP 页面

要使用 HTML 文件创建 页面,请执行以下操作:

  1. 启动 Studio 并选择 File > New > > 。
  2. 将新 文件的内容替换为以下内容:
<html>
<body>
<b>Hello, World!</b>
</body>
</html>
  1. 选择文件 > 保存。
  2. 在显示的另存为窗口中,双击默认 CSP 应用程序 csp/user
  3. 输入文件名 Hello.csp 并单击另存为以保存文件。
  4. 在 窗口中,选择查看 > 网页。

与前面的示例一样,会看到 显示在浏览器中。

CSP 应用程序可以由单个 页面或一组页面组成。 CSP 应用程序作为一个单元,使用适用于整个应用程序的设置。系统提供 作为默认的 应用程序。

还可以使用文本编辑器或 编辑器创建 文件。将此文件作为 Hello.csp 保存在本地目录 中(其中 是安装 的位置)。

页面的工作方式如下:

  1. 浏览器向本地 服务器发送 请求
  2. 服务器将此请求传递给 网关(连接到 服务器), 网关又将请求传递给 服务器。
  3. 服务器查找文件 ,并将其交给 编译器。
  4. 编译器创建一个名为 的新类,该类具有写出 文件内容的 方法。 (它实际上生成一组方法,每个方法依次从
0
0 339
文章 姚 鑫 · 十月 1, 2022 2m read

第三章 Caché 服务器页面简介 - 通过 cls 创建 csp 页面

创建第一个 CSP 页面

本节介绍如何以两种不同的方式创建 Hello, World CSP 页面:

创建基于类的 CSP 页面

通过创建 的子类并覆盖其 OnPage 方法来创建 页面。通过此方法写入主设备的任何输出都会自动发送到 浏览器并显示为网页。

  1. 打开Studio
  2. 选择 File > New Project 在本地数据库 USER 命名空间中创建一个新项目。
  3. 在向导的第一页上,输入 作为包名,并输入 作为类名
  4. 在第二页上,选择 CSP 作为类类型。
  5. 单击完成。可以在 类编辑器中看到新的 CSP 类定义:
  1. OnPage 方法中,替换注释:
 ; To do...

使用 语句:

  1. 使用 Build > Compile 保存并编译新类。
  2. 选择视图 > 网页。

会在浏览器中看到 Hello, World

这个 页面也是一个 应用程序,其工作原理如下:

  1. 浏览器向指定命名空间中的本地 Web 服务器发送对 Test.Hello.cls 的请求。

  2. 服务器将此请求传递给 网关,CSP 网关将请求传递给 服务器。在我们的例子中,浏览器、 服务器和 应用程序服务器都运行在同一台机器上。在实际部署中,这些可能位于不同的机器上。

  3. 服务器查找名为 的类并调用其

0
0 183
文章 姚 鑫 · 九月 30, 2022 2m read

第二章 Caché 服务器页面简介 - 你应该知道

你应该知道什么

要高效使用 CSP,应该熟悉以下内容:

  • Caché objects and ObjectScript

  • HTML

  • JavaScript

CSP Samples

Caché 附带一组示例CSP 页面。要查看这些:

  1. 打开

  2. 要查看 示例,请确保计算机上的 Web 服务器正在运行。

  3. 启动浏览器并转到 CSP 示例菜单(使用位于以下位置的私有 Web 服务器:http://localhost:57772/csp/samples/menu.csp或位于以下位置的外部 Web` 服务器:http://localhost /csp/samples/menu.csp 。

  4. 如果安装的 具有正常或锁的安全功能,则可能会显示登录页面。如果是这样,请登录。

  5. 显示示例 页面的列表以及每个页面的简短描述。单击感兴趣的任何内容。

文档

可以在此处找到有关 的文档:

  • 使用 描述了如何创建 页面
  • 使用 ZEN 描述了如何使用 ZEN,这是一个在 之上工作的包,用于使用预构建的页面对象进行更快速的 Web 应用程序开发。 文档包括使用 组件、开发 应用程序和使用 报告。
  • ,对所有 标签的引用
  • CSP 示例菜单,显示了许多 页面示例。
  • 服务器页面快速入门教程让入门。
0
0 244
文章 姚 鑫 · 九月 29, 2022 3m read

第一章 Caché 服务器页面简介 - 什么是CSP

Caché Server Pages (CSP) 既是用于构建交互式 CSP 应用程序的架构又是工具集。 CSP 技术允许构建和部署高性能、高度可扩展的 应用程序。 允许动态生成网页,通常使用来自 数据库的数据。 “动态”意味着每次从最近更改的数据源请求同一页面时,它可能会提供不同的内容。

用途广泛。它可以

  • 显示每分钟都在变化的库存数据。
  • 支持拥有数千名活跃用户的网络社区。
  • 根据存储在 Caché 数据库中的用户信息个性化页面。
  • 根据不同用户的要求和安全权限,根据用户数据为不同用户定制页面。
  • 提供 HTMLXML、图像或其他二进制或文本数据。
  • 提供快速性能,因为它与高性能 数据库紧密耦合。

非常适合数据库应用程序。除了提供对内置 数据库的快速访问之外,它还提供了许多基于 Web 的数据库应用程序必不可少的功能,包括

  • 会话管理
  • 页面认证
  • 能够从网页中执行交互式数据库操作。

支持两种风格的 开发。

  • 为了使用类开发应用程序,CSP 提供了一个对象框架。
  • 为了使用 文件开发应用程序,CSP 提供了一种基于 的标记语言,允许在网页中包含对象和服务器端脚本。可以在一个应用程序中结合这两种技术以获得最大的灵活性。

CSP 和 Zen

是一个应用程序框架,用于快速创建包含在 和 中的数据丰富的

0
0 496
文章 姚 鑫 · 九月 27, 2022 2m read

第四十五章 配置第三方软件以与 InterSystems 产品结合使用

产品通常在与非 工具一起运行的环境中运行,我们的产品与此类工具之间的交互可能会产生有害影响。 关于最佳、可靠部署配置的指导假定我们的产品可以在不受第三方工具干扰的情况下进行部署。例如, 发现用于安全、系统监控或病毒扫描的软件可能会影响我们产品的安装、性能和功能。对于直接与属于 产品的一部分或被 产品使用的文件进行交互的工具(例如病毒扫描程序)尤其如此。

了解客户面临的业务、合规性和其他要求会影响有关在给定环境中运行哪些软件以及如何配置此类软件的决策。一般来说, 建议我们产品的服务器端安装通过物理安全和隔离来保护。这种保护应该减少对其他工具的需求,或者至少减少它们运行的频率。

病毒扫描仪观察:

  1. 为了交付经过病毒检查的软件, 产品在经过消毒的环境中交付给我们的客户,并通过提供校验和进行验证。
  2. 性能影响。

[对策] 出于扫描目的,排除以下文件和目录:

  • WIJ 文件和包含 WIJ 文件的目录*
  • 本指南“配置 ”一章中的所有数据库文件 () 和包含数据库文件的目录*(请参阅配置数据库)。
  • 存储或处理日志文件的任何目录*
  • 数据平台运行所需的任何其他文件/目录*。例如备用日志目录*(请参阅数据完整性指南中的“日志”),或业务服务或生产使用的任何目录*。
  1. 可执行文件的误报。
0
0 134
文章 姚 鑫 · 四月 8, 2021 8m read

第二十章 用户、角色和权限

InterSystems IRIS®具有系统级安全性,以及一组与sql相关的额外安全性特性。 在数据库级保护之外,InterSystems SQL安全性提供了额外级别的安全功能。 SQL和系统级安全性之间的一些关键区别是:

  • SQL保护比系统级保护更细粒度。可以为表、视图和存储过程定义特权。
  • SQL权限既可以授予用户,也可以授予角色。 系统级权限只分配给角色。
  • 持有SQL特权会隐式授予执行SQL操作所需的任何相关系统特权。 (相反,系统级特权并不意味着表级特权。)

InterSystems SQL在InterSystems IRIS数据平台上对ODBC、JDBC、Dynamic SQL和SQL Shell接口进行权限检查。 嵌入式SQL语句不执行特权检查; 假定使用嵌入式SQL的应用程序在使用嵌入式SQL语句之前会检查特权。

SQL权限和系统权限

要通过特定于SQL的机制操作表或其他SQL实体,用户必须具有适当的SQL权限。 系统级权限不足。 用户可以直接被授予SQL权限,也可以属于具有SQL权限的角色。

注意:角色是由SQL和系统级安全共享的:单个角色可以包括系统和SQ权限。

下面的例子,以Windows机器上的InterSystems IRIS为例:

  • 在用户名称空间中有一个名为User.MyPerson的持久化类。 这个类被投影到SQL中作为SQLUser.MyPerson
1
0 520
文章 姚 鑫 · 九月 26, 2022 2m read

[toc]

第四十四章 使用多个 IRIS 实例(四)

配置多个 IRIS 实例

可以在一台机器上安装并同时运行多个 IRIS 实例。像单一安装一样安装 IRIS,为每个实例提供唯一的名称、唯一的安装目录以及用于超级服务器、Web 服务器和 的唯一端口号。

多个实例的特殊注意事项是:

  • 安装多个实例受到系统上仅存在一个的组件的限制。例如,通常系统上只有一个 Web 服务器;因此 IRIS 安装将 配置为最新安装。存储在注册表中的 客户端组件遇到了同样的问题。 将其 驱动程序存储在注册表中,每个驱动程序使用一个名称。目前,最后一次安装会更新这些组件以指向最后安装的实例。

努力将通用组件移动到可以在 实例之间共享的通用目录中。

  • 多个实例可以共享同一个多服务器密钥,但如果这样做,它们必须使用同一个许可证服务器或一组许可证服务器。在一个或多个许可证服务器的支持下运行 实例的每个系统都必须在每个实例中安装授权许可证密钥文件的本地副本。
  • 多个实例可以联网。
  • 包括对同时使用数据库的保护(即,每个实例必须有自己的数据库,并且不能访问或修改另一个实例的数据库)。
  • 每个实例必须具有唯一的端口号。有关如何设置端口号的信息,请参阅下一节。

设置端口号

对于 的标准单一实例,超级服务器端口号默认为 。对于一台机器上的多个 实例,每个实例都必须有一个唯一的端口号。

0
0 159
文章 姚 鑫 · 九月 25, 2022 8m read

第四十三章 使用多个 IRIS 实例(三)

Windows 上的 iris 命令

Windows 上,必须从 目录运行 iris 命令(或在命令中包含完整路径)。

  • iris all 列出所有已安装实例的摘要信息,每行一个实例,如下所述。

注意:如果需要完整的信息,例如用于解析或报告目的,请使用 。

  • iris allw 为每个实例列出与 iris all 相同的信息,而不包含长字段值。可能会产生超过 80 个字符的行。
C:\InterSystems\IRISHealth\bin>iris allw
    Instance Name                   Version ID                   Port   Directory
    ------------------------------- ---------------------------- -----  --------------------------------
up  irishealth                      2022.1.0.114.0               51773  c:\intersystems\irishealth
0
0 164