HealthConnect中创建HTTP服务端
这里我说说怎么在HealthConnect上开发HTTP服务。
作为消息引擎,HealthConnect会需要从一个接口接收HTTP请求发送到另一个接口,中间做消息转换,路由等等,目的的接口可能是HTTP,或者SOAP,REST等等。这里只介绍HTTP服务的内容,也就是最简单的两种实现:
第一种:实现客户定制的HTTP服务业务服务组件(Business Servie)
创建Business Service类,继承EnsLib.HTTP.Service, 如下面的示例:
Class SEDemo.IO.HTTP.ServiceExample1 Extends EnsLib.HTTP.Service
{
Parameter ADAPTER;
Method OnProcessInput(pInput As %Stream.Object, Output pOutput As %Stream.Object) As %Status
{
//创建Ensemble消息发送给其他组件
set pRequest=##class(Ens.StreamContainer).%New()
Set tSC=pRequest.StreamSet(pInput)
set tSC= ..SendRequestAsync("Dummy1",pRequest,.pResponse)
//创建返回Stream,发送给调用方
set pOutput=##class(%Stream.GlobalCharacter).%New()
do pOutput.Write("yes, I recieved request")
Quit tSC
}
}
详细说明:
使用CSP机制接收请求,不要用HTTP的Inbound Adpater,这样能得到
如果您学习过在Ensemble上开发SOAP接口,一定对代码里的"Parameter ADAPTER;"不陌生,它的作用是确定不要使用父类里的Adapter。
EnsLib.HTTP.Service有两个工种模式,一个是使用内置适配器是Ens.HTTP.InboundAdapter,还有一个是使用CSP机制,从CSP Gateway接收请求。下面的图中黄色的箭头是用适配器接收消息,这时业务服务可以定义工种的URL,端口,SSL等等;下面红色的箭头是所谓的”CSP请求“,也就是HTTP请求经过Web服务器,CSP Gateway, 到Web Application, 再被EnsLib.HTTP.Service收到。

使用CSP机制有更好的安全性和性能,所以在HealthConnect中任何HTTP的服务端接口我们都推荐CSP机制,包括HTTP接口,SOAP接口, REST接口。这些接口的开发都不要使用对应的InboundAdapter。
有关CSP Gateway的原理,还可以参见在线文档或者我的另一技术文章:Web Gateway介绍
注意的是:当不使用Adapter时,Production页面的组件配置中很多项目会消失,这些是Adapter的属性,比如允许的IP, 端口,包括编码等等。因为不用Adapter,您也不用定义IP,端口号;只有编码,可以在BS的代码里实现。实现的操作可以参考Adapter的设置: https://docs.intersystems.com/healthconnectlatest/csp/docbook/Doc.Vie