本文介绍如何使用阿里云多款产品,实现云上部署医学数字成像和通信DICOM服务。
什么是DICOM
DICOM是传输、存储、检索、打印、处理和显示医学成像信息的国际标准,并且是医疗保健行业接受的主要医学成像标准。在数以万计的在用医学成像设备中,DICOM是部署最为广泛的医疗信息标准之一。DICOM确保医学影像符合质量标准,因而可以保证诊断准确性。大多数成像方式,包括计算机断层扫描 (CT)、磁共振成像 (MRI) 和超声扫描,都必须符合DICOM标准。更多信息,请参见DICOM。
方案架构
DICOM服务部署架构图如下:

部署架构图中涉及各项云服务的用途说明如下:
- 函数计算(FC):用于处理用户请求,提供请求鉴权以及资源访问控制服务,并路由至DICOMweb服务。
- 专有网络VPC:基于阿里云创建的自定义私有网络, 不同的专有网络之间二层逻辑隔离,您可以在自建的专有网络内创建和管理云产品实例,例如ECS实例、RDS PostgreSQL数据库实例等。
- Serverless应用引擎(SAE):用于处理DICOMweb协议,将DICOM文件存储到OSS,将结构化数据存储到RDS PostgreSQL数据库实例。
- 云服务器ECS:部署三台ECS实例。其中一台ECS实例用于部署DICOM管理模块,提供基于UI的管理界面。另外两台ECS实例分别用于部署两套LDAP服务,LDAP服务之间通过镜像模式同步数据。
- RDS PostgreSQL数据库实例:用于存储结构化的DICOM资源。
- 对象存储OSS:用于存储非结构化的DICOM资源。
步骤一:创建专有网络和交换机
鉴于不同的专有网络之间的二层逻辑隔离,您可以通过专有网络来管理云产品实例,例如ECS实例、RDS PostgreSQL数据库实例等。创建专有网络后,您可以通过创建交换机为专有网络划分一个或多个子网。同一专有网络内的不同交换机之间内网互通。
- 在华东2(上海)地域创建名为
vpc-dicom-sh
、网段为172.18.0.0/16
的专有网络。具体操作,请参见创建和管理专有网络。 - 在华东2(上海)地域不同可用区创建两个交换机。
- 在可用区L创建名为
vsw-dicom-sh-l
、网段为172.18.80.0/20
的交换机。 - 在可用区G创建名为
vsw-dicom-sh-g
、网段为172.18.16.0/20
的交换机。
具体操作,请参见创建交换机。
步骤二:创建并配置RDS PostgreSQL数据库实例
创建RDS PostgreSQL数据库实例用于存储结构化的DICOM资源。RDS PostgreSQL实例创建完成后,您需要进行白名单设置等操作,确保能正常访问该实例。
- 创建RDS PostgreSQL数据库实例。
- 登录RDS售卖页面。
- 在基础资源页签,配置以下参数,然后单击下一步:实例配置。
配置项 | 示例值 |
---|
计费方式 | 按需选择按量付费或包年包月。 |
地域 | 选择华东2(上海)。 |
类型 | 选择PostgreSQL,并从下拉列表中选择引擎13。 |
系列 | 选择高可用版。 |
存储类型 | 选择ESSD PL3 云盘。 |
主节点可用区 | 选择上海可用区L。 |
备节点可用区 | 选择上海可用区G。 |
实例规格 | 选择CPU核数为2、内存为4 GB、最大连接数为400的通用型规格实例。 |
存储空间 | 选择1500 GB。 |
- 在实例配置页面,按如下说明配置各项参数,其他保留默认配置,然后单击下一步:确认订单。
配置项 | 示例值 |
---|
VPC | 选择步骤一中创建的VPC: vpc-dicom-sh 。 |
主节点交换机 | 选择步骤一中创建的主节点交换机:vsw-dicom-sh-l |
备选节点交换机 | 选择步骤一中创建的备选节点交换机:vsw-dicom-sh-g |
- 配置RDS PostgreSQL数据库实例。
创建RDS PostgreSQL实例后,您需要完成以下各项操作,才能正常访问该RDS实例。
- 为已创建的RDS PostgreSQL实例创建账号和数据库。具体操作,请参见创建账号和数据库。
- 为RDS PostgreSQL数据库实例设置白名单。具体操作,请参见设置白名单。
- 连接RDS PostgreSQL实例。具体操作,请参见连接PostgreSQL实例。
步骤三:部署LDAP服务
基于dcm4che/slapd-dcm4chee
镜像,采用OpenLDAP复制策略部署LDAP服务的操作步骤如下:
- 创建两台ECS实例,分别命名为
ecs-dicom-ldap-l-01
和ecs-dicom-ldap-g-01
。具体操作,请参见通过控制台使用ECS实例(快捷版)。通过云服务器
ECS
管理控制台创建
ECS
实例
ecs-dicom-ldap-l-01
时,按以下要求完成指定配置项,其他选项保留默认配置。
配置项 | 示例值 |
---|
地域 | 选择华东2(上海)。 |
可用区 | 选择可用区L。 |
存储 | 选择ESSD云盘、40 GiB、PL0(单盘IOPS性能上限1万)。 |
规格 | 选择共享标准型s6 / ecs.s6-c1m2.large(2vCPU 4GiB)。 |
专有网络 | 选择步骤一中创建的VPC: vpc-dicom-sh 。 |
公共镜像 | 选择Ubuntu 18.04 64位 |
ecs-dicom-ldap-l-01
实例创建完成后,请参照以上配置项创建ecs-dicom-ldap-g-01
,区别仅在于可用区需选择可用区G。
- 登录ECS实例,执行以下命令完成初始化操作。
apt-get update
apt-get upgrade -y
apt install ca-certificates curl gnupg pass lsb-release docker docker-compose ldap-utils -y
- 执行以下命令从容器镜像服务ACR企业版实例中拉取镜像。
docker login --username=****@test.aliyunid.com acr-ee-***-registry-vpc.cn-shanghai.cr.aliyuncs.com
docker pull acr-ee-***-registry-vpc.cn-shanghai.cr.aliyuncs.com/dicom/slapd-dcm4chee:2.6.0-25.0
- 分别为以上创建的两台ECS实例
ecs-dicom-ldap-l-01
和ecs-dicom-ldap-g-01
配置镜像启动脚本。ecs-dicom-ldap-l-01
的docker-compose.yml启动脚本配置如下:version: "3"
services:
ldap1:
image: acr-ee-***-registry-vpc.cn-shanghai.cr.aliyuncs.com/dicom/slapd-dcm4chee:2.6.0-25.0
environment:
LDAP_URLS: "ldap://ldap1:389/"
LDAP_REPLICATION_HOSTS: "ldap://ldap1:389/ ldap://172.18.18.105:389/"
ports:
- "389:389"
volumes:
- /var/local/dcm4chee-arc/ldap:/var/lib/openldap/openldap-data
- /var/local/dcm4chee-arc/slapd.d:/etc/openldap/slapd.d
ecs-dicom-ldap-g-01
的docker-compose.yml启动脚本配置如下:version: "3"
services:
ldap2:
image: acr-ee-***-registry-vpc.cn-shanghai.cr.aliyuncs.com/dicom/slapd-dcm4chee:2.6.0-25.0
environment:
LDAP_URLS: "ldap://ldap2:389/"
LDAP_REPLICATION_HOSTS: "ldap://172.18.92.187:389/ ldap://ldap2:389/"
SKIP_INIT_CONFIG: "true"
ports:
- "389:389"
volumes:
- /var/local/dcm4chee-arc/ldap:/var/lib/openldap/openldap-data
- /var/local/dcm4chee-arc/slapd.d:/etc/openldap/slapd.d
- 在docker-compose.yml同级目录下,执行以下操作。
- 启动LDAP服务。
docker-compose -p dcm4chee up -d
- 获取LDAP容器ID。
- 开启同步功能。
docker exec <ldap-container-id> prepare-replication
docker exec <ldap-container-id> enable-replication
- 可选:查看同步配置状态。
# -xw****为启动LDAP服务时配置的密钥。该参数可通过LDAP_ROOTPASS环境变量进行配置,默认值为secret。
ldapsearch -LLLsbase -xw**** -Dcn=admin,dc=dcm4che,dc=org -b "dicomDeviceName=dcm4chee-arc,cn=Devices,cn=DICOM Configuration,dc=dcm4che,dc=org" dicomVendorData | head
同步任务启动成功后,返回如下信息:
dn: dicomDeviceName=dcm4chee-arc,cn=Devices,cn=DICOM Configuration,dc=dcm4che,
dc=org
dicomVendorData:: UEsDBBQAAAAAAKVbclMAAAAAAAAAAAAAAAALAAAAdGh1bWJuYWlscy9QSwME
FAACAAgANWxIUhxjQjGkBgAAeQcAABEAAAB0aHVtYm5haWxzL2tvLnBuZ83V+zub5xsA8JdQh1Bpa
****
- 创建负载均衡CLB实例。
- 登录传统型负载均衡CLB控制台。
- 在实例管理页面,单击创建传统型负载均衡。
- 在实例购买页面,根据以下要求完成指定配置项,其他选项保留默认配置。
配置项 | 示例值 |
---|
地域和可用区 | 地域选择华东2(上海),可用区选择华东2可用区L。 |
备可用区 | 选择华东2可用区G。 |
实例名称 | 输入slb-dicom-ldap。 |
实例规格 | 选择简约型(slb.s1.small)。 |
实例类型 | 选择私网。 |
网络类型 | 选择专有网络 |
专有网络 | 选择步骤一中创建的VPC: vpc-dicom-sh 。 |
- 单击立即购买,然后按照页面指引完成订单支付。
- 配置负载均衡CLB实例。
- 在实例管理页面,找到目标实例
slb-dicom-ldap
,然后在操作列单击监听配置向导。 - 在协议&监听配置向导,负载均衡协议选择TCP、监听端口选择389,然后单击下一步。
- 在后端服务器配置向导,单击主备服务器组,然后选择已创建的服务器组ecs-dicom-ldap-l-01和ecs-dicom-ldap-g-01。
步骤四:部署DICOM管控服务
以下步骤为基于dcm4che/dcm4chee-arc-psql
镜像部署DICOM管控服务,该服务主要用于为运维人员提供管理和查询页面。本示例中采用单点部署,您可以根据实际的业务情况,选择其他部署方案。
- 创建名为
ecs-dicom-arc-l-01
的ECS实例。具体操作,请参见通过控制台使用ECS实例(快捷版)。通过云服务器
ECS
管理控制台创建
ECS
实例
ecs-dicom-arc-l-01
时,按以下要求完成指定配置项,其他选项保留默认配置。
配置项 | 示例值 |
---|
地域 | 选择华东2(上海)。 |
可用区 | 选择可用区L。 |
存储 | 选择ESSD云盘、100 GiB、PL0(单盘IOPS性能上限1万)。 |
规格 | 选择通用型 g7 / ecs.g7.xlarge(4vCPU 16 GiB)。 |
专有网络 | 选择步骤一中创建的VPC: vpc-dicom-sh 。 |
公共镜像 | 选择Ubuntu 18.04 64位 |
- 登录ECS实例,执行以下命令完成初始化操作。
apt-get update
apt-get upgrade -y
apt install ca-certificates curl gnupg pass lsb-release docker docker-compose postgresql-client-10 -y
- 执行以下命令从容器镜像服务ACR企业版实例中拉取镜像。
docker login --username=****@test.aliyunid.com acr-ee-***-registry-vpc.cn-shanghai.cr.aliyuncs.com
docker pull acr-ee-***-registry-vpc.cn-shanghai.cr.aliyuncs.com/dicom/dcm4chee-arc-psql:5.25.0
- 初始化数据库。
- 将
dcm4chee-arc-5.25.0-psql.zip
压缩包上传到ECS的/home目录下,然后解压。 - 执行以下命令创建表和索引。
psql -h pgm-uf***.pg.rds.aliyuncs.com pacsdb pacs < /home/dcm4chee-arc-5.25.0-psql/sql/create-psql.sql
psql -h pgm-uf***.pg.rds.aliyuncs.com pacsdb pacs < /home/dcm4chee-arc-5.25.0-psql/sql/create-fk-index.sql
psql -h pgm-uf***.pg.rds.aliyuncs.com pacsdb pacs < /home/dcm4chee-arc-5.25.0-psql/sql/create-case-insensitive-index.sql
- 配置启镜像启动脚本。
- 执行以下命令配置
docker-compose.yml
文件。version: "3"
services:
arc:
image: acr-ee-***-registry-vpc.cn-shanghai.cr.aliyuncs.com/dicom/dcm4chee-arc-psql:5.25.0
logging:
driver: json-file
options:
max-size: "10m"
ports:
- "8080:8080"
- "8443:8443"
- "9990:9990"
- "9993:9993"
- "11112:11112"
- "2762:2762"
- "2575:2575"
- "12575:12575"
env_file: docker-compose.env
environment:
WILDFLY_CHOWN: /opt/wildfly/standalone
volumes:
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
- /var/local/dcm4chee-arc/wildfly:/opt/wildfly/standalone
- 执行以下命令配置
docker-compose.env
文件。其中,LDAP
指向
ecs-dicom-ldap-l-01
。
POSTGRES_DB=pacsdb
POSTGRES_USER=pacs
POSTGRES_PASSWORD=pacs***
POSTGRES_HOST=pgm-uf***.pg.rds.aliyuncs.com
LDAP_URL=ldap://172.18.92.187:389
- 在
docker-compose.yml
同级目录下,执行以下命令启动容器镜像服务ARC。docker-compose -p dcm4chee up -d
- 可选:执行以下命令查看容器镜像服务ARC启动状态。
tail -f /var/local/dcm4chee-arc/wildfly/log/server.log
- 添加OSS存储介质。
- 创建
ldap_config.ldif
文件,并通过LDAP的ldapadd导入配置参数。ldap_config.ldif
配置内容如下:version: 1
dn: dcmStorageID=alicloud-oss,dicomDeviceName=dcm4chee-arc,cn=Devices,cn=DICOM Configuration,dc=dcm4che,dc=org
objectClass: dcmStorage
dcmStorageID: alicloud-oss
dcmURI: jclouds:s3:https://oss-cn-shanghai-internal.aliyuncs.com
dcmDigestAlgorithm: MD5
dcmProperty: container=examplebucket
dcmProperty: jclouds.s3.virtual-host-buckets=true
dcmProperty: credential=<secret-key>
dcmProperty: identity=<access-key>
dcmProperty: jclouds.strip-expect-header=true
dcmProperty: containerExists=true
dcmProperty: jclouds.trust-all-certs=true
- 执行以下命令导入配置文件。
# -xw****为启动LDAP时配置的密钥。
#172.18.92.175
ldapadd -xw**** -D cn=admin,dc=dcm4che,dc=org -H ldap://172.18.92.187:389 -f ldap_config.ldif
- 配置OSS作为存储后端。
- 创建
ldap_config.ldif
文件,并通过LDAP的ldapadd导入配置参数。ldap_config.ldif
配置内容如下:version: 1
dn: dicomAETitle=DCM4CHEE,dicomDeviceName=dcm4chee-arc,cn=Devices,cn=DICOM Configuration,dc=dcm4che,dc=org
changetype: modify
replace: dcmObjectStorageID
dcmObjectStorageID: alicloud-oss
- 执行以下命令导入配置文件。
ldapmodify -xw**** -D cn=admin,dc=dcm4che,dc=org -H ldap://172.18.92.187:389 -f ldap_config.ldif
- 执行以下命令导入测试数据。
docker run --network=dcm4chee_default --rm acr-ee-***-registry-vpc.cn-shanghai.cr.aliyuncs.com/dicom/dcm4che-tools:5.25.0 storescu -cDCM4CHEE@dcm4chee_arc_1:11112 /opt/dcm4che/etc/testdata/dicom
步骤五:部署DICOMweb服务
您需要在SAE应用中部署DICOMweb服务,部署完成后可添加私网SLB实现同VPC内所有应用间的互相访问。
- 创建应用。
- 登录Serverless应用引擎SAE控制台。
- 在左侧导航栏,单击应用列表,然后单击创建应用 。
- 在应用基本信息页面,按如下要求完成各配置项,然后单击下一步:应用部署配置。
配置项 | 示例值 |
---|
应用名称 | 输入DicomSerivce。 |
专有网络配置 | 选择自定义配置,然后在右侧下拉选择已创建的VPC vpc-dicom-sh 。 |
命名空间 | 选择默认。 |
vSwitch | 选择已创建的交换机vsw-dicom-sh-l 和vsw-dicom-sh-g 。 |
安全组 | 选择已有的安全组。如果此前未创建安全组,请按照界面指引创建新的安全组。 |
应用实例数 | 选择2。 |
VCPU | 选择8 Core。 |
内存 | 选择32 GiB。 |
- 在应用部署配置页面,按如下要求完成指定配置项,其他选项保持默认配置,然后单击下一步:确认规格。
配置项 | 示例值 |
---|
应用部署方式 | 选择镜像。 |
配置镜像 | 选择我的阿里云镜像,并设置为dicom/dcm4chee-arc-psql:5.25.0 。 |
环境变量 | 输入以下内容:POSTGRES_USER = pacs
POSTGRES_HOST = pgm-uf**.pg.rds.aliyuncs.com
POSTGRES_PASSWORD = pacs****
POSTGRES_DB = pacsdb
LDAP_URL = ldap://172.18.92.189:389
|
- 按界面指引完成应用的创建。创建完成后,实例分配的IP地址分别为
172.18.92.190
和172.18.18.113
。
- 为已创建的应用添加私网SLB访问,然后将HTTP端口配置为
8080
。具体操作,请参见为应用绑定SLB。配置完成后,您可以获取到的私网访问地址为172.18.92.191:8080
。
- 登录名为
ecs-dicom-arc-l-01
的ECS实例,依次执行如下命令测试部署的实例以及私网SLB是否正常运行。curl -v "http://172.18.92.190:8080/dcm4chee-arc/aets/DCM4CHEE/rs/patients?limit=21&includefield=all&offset=0"
curl -v "http://172.18.18.113:8080/dcm4chee-arc/aets/DCM4CHEE/rs/patients?limit=21&includefield=all&offset=0"
curl -v "http://172.18.92.191:8080/dcm4chee-arc/aets/DCM4CHEE/rs/patients?limit=21&includefield=all&offset=0"
正常情况返回信息如下:
HTTP/1.1 200 OK
< Date: Thu, 23 Dec 2021 13:25:25 GMT
< Content-Type: application/dicom+json
< Transfer-Encoding: chunked
< Connection: keep-alive
< Access-Control-Allow-Origin: *
< Cache-Control: no-cache
< Access-Control-Allow-Headers: origin, content-type, accept, authorization
< Access-Control-Allow-Credentials: true
< Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS, HEAD
<
* Connection #0 to host 172.18.92.191 left intact
[{"00100010":{"vr":"PN","Value":[{"Alphabetic":"DOE^J1"}]},"00100020":{"vr":"LO","Value":["583295"]},"00100021":{"vr":"LO"},"00100030":{"vr":"DA"},"00100040":{"vr":"CS","Value":["M"]},"00201200":{"vr":"IS","Value":["1"]},"77770010":{"vr":"LO","Value":["DCM4CHEE Archive 5"]},"77771010":{"vr":"DT","Value":["20211223143303.778+0000"]},"77771011":{"vr":"DT","Value":["20211223143303.786+0000"]}
步骤六:部署访问网关
通过在函数计算中部署Nginx代理来转发请求,以提供访问管控和资源隔离的能力。
- 构建反向代理镜像。
- 登录名为
ecs-dicom-arc-l-01
的ECS实例,在配置文件default.conf.template
中编写转发规则。default.conf.template
配置内容如下:
upstream dicom_server
{
server ${DICOM_SERVER_HOST}:${DICOM_SERVER_PORT};
}
upstream ${DICOM_CUSTOM_DOMAIN}
{
server ${DICOM_SERVER_HOST}:${DICOM_SERVER_PORT};
}
server
{
listen 80;
server_name localhost;
location ~/${DICOM_FUNCTION_PATH}/dcm4chee-arc/aets/DCM4CHEE/(rs|wado|dimes)/(.+){
proxy_pass http://dicom_server/dcm4chee-arc/aets/DCM4CHEE/$1/$2;
}
location ~/dcm4chee-arc/aets/DCM4CHEE/(rs|wado|dimes)/(.+){
proxy_pass http://${DICOM_CUSTOM_DOMAIN}/dcm4chee-arc/aets/DCM4CHEE/$1/$2;
}
location / {
return 403;
}
}
- 在与
default.conf.template
文件同级目录下,编写Dockerfile
文件,内容如下:FROM acr-ee-test-registry-vpc.cn-shanghai.cr.aliyuncs.com/dicom/nginx:1.21.4
RUN mkdir -p /etc/nginx/templates/
COPY default.conf.template /etc/nginx/templates/default.conf.template
- 执行如下命令生成镜像,并推送到容器镜像服务中,待后续配置函数计算时使用。
docker build -t acr-ee-***-registry-vpc.cn-shanghai.cr.aliyuncs.com/dicom/nginx:1.21.4-dicom-revproxy-0.1 .
docker push acr-ee-***-registry-vpc.cn-shanghai.cr.aliyuncs.com/dicom/nginx:1.21.4-dicom-revproxy-0.1
- 配置域名解析到您的函数计算对应地域的Endpoint。具体操作,请参见配置域名解析。
- 创建服务。
- 登录函数计算控制台。
- 在左侧导航栏,单击服务及函数。
- 在顶部菜单栏,选择华东2(上海)地域。
- 在服务列表页面,单击创建服务。
- 在创建服务页面,填写服务名称dicomweb,然后单击确定。
- 编辑服务。
- 在服务列表页面,单击已创建的服务dicomweb右侧操作栏下的配置。
- 在编辑服务页面,角色配置、日志配置、链路追踪配置、存储配置区域均保持默认选项。仅需按如下要求完成网络配置区域的指定配置项。
配置项 | 示例值 |
---|
允许函数访问 VPC 内资源 | 选中是。 |
配置方式 | 选中自定义配置。 |
专有网络 | 选择已创建的专有网络vpc-dicom-sh。 |
交换机 | 选择已创建的交换机vsw-dicom-sh-g。 |
允许函数访问公网 | 选中否。 |
仅允许指定 VPC 调用函数 | 选中否。 |
- 创建函数。
- 单击已创建的服务名称
dicomweb
。 - 在函数管理页面,单击创建函数。
- 在创建函数页面,选中使用容器镜像创建,按如下要求完成指定配置项,其他选项保持默认配置。
配置项 | 示例值 |
---|
名称 | 填写do。 |
容器镜像 | 选择acr-ee-***-registry-vpc.cn-shanghai.cr.aliyuncs.com/dicom/nginx:1.21.4-dicom-revproxy-0.1。 |
监听端口 | 输入80。 |
运行环境 | 选择Custom Container。 |
单实例并发数 | 选择100。 |
内存规格 | 选择4 GB。 |
环境变量 | 输入以下内容:# 填写为函数绑定的自定义域名。
DICOM_CUSTOM_DOMAIN = www.dicomweb-***.com
# 填写测试接口调用请求地址中的PATH。
DICOM_FUNCTION_PATH = 2016-08-15/proxy/dicomweb.LATEST/do
# 填写步骤五生成的私网访问地址。
DICOM_SERVER_HOST = 172.18.92.191
# 填写步骤五配置的端口号。
DICOM_SERVER_PORT = 8080
|
重要 启动通过函数计算
Custom Container
方式创建的访问网关服务时,耗时会达到
200~300ms。您可以通过配置预留实例的方式降低冷启动对业务的影响。结合本示例场景,最小实例数配置为
1,其他参数保持默认配置。其他场景请结合实际情况进行配置。具体操作,请参见
弹性管理(含预留模式)。
- 添加自定义域名
www.dicomweb-***.com
并添加路由配置。具体操作,请参见添加自定义域名。按指定要求完成路由设置,其他选项保留默认配置。
配置项 | 示例值 |
---|
路径 | 设置为/dcm4chee-arc/aets/DCM4CHEE/*。 |
服务名称 | 选择dicomweb。 |
函数名称 | 选择do。 |
版本或别名 | 选择LATEST。 |
- 测试接口调用情况。
- 单击创建的函数do。
- 单击触发器管理页签,记录同步创建的触发器右侧的中的请求地址 http://13****.cn-shanghai.fc.aliyuncs.com/2016-08-15/proxy/dicomweb.LATEST/do/。
- 通过以下两种方式测试接口调用情况。
- 通过默认地址测试接口调用情况
- 查询patients信息
curl -v "http://13****.cn-shanghai.fc.aliyuncs.com/2016-08-15/proxy/dicomweb.LATEST/do/dcm4chee-arc/aets/DCM4CHEE/rs/patients?limit=21&includefield=all&offset=0"
正常情况下返回如下信息:
[{"00100010":{"vr":"PN","Value":[{"Alphabetic":"DOE^J1"}]},"00100020":{"vr":"LO","Value":["583295"]},"00100030":{"vr":"DA"},"00100040":{"vr":"CS","Value":["M"]}}]
- 查询PatientID为583295的studies信息:
curl -v "http://www.dicomweb-***.com//dcm4chee-arc/aets/DCM4CHEE/rs/studies?limit=21&includefield=all&offset=0&PatientID=583295"
正常情况下返回如下信息:
[{"00080020":{"vr":"DA","Value":["20170716"]},"00080030":{"vr":"TM","Value":["154736"]},"00080050":{"vr":"SH","Value":["MOF5026"]},"00080054":{"vr":"AE","Value":["DCM4CHEE"]},"00080056":{"vr":"CS","Value":["ONLINE"]},"00080061":{"vr":"CS","Value":["MR"]},"00080090":{"vr":"PN","Value":[{"Alphabetic":"NELL^FREDERICK^P^DR"}]},"00081190":{"vr":"UR","Value":["http://dicom_server/dcm4chee-arc/aets/DCM4CHEE/rs/studies/1.113654.3.13.1026"]},"00100010":{"vr":"PN","Value":[{"Alphabetic":"DOE^J1"}]},"00100020":{"vr":"LO","Value":["583295"]},"00100030":{"vr":"DA"},"00100040":{"vr":"CS","Value":["M"]},"0020000D":{"vr":"UI","Value":["1.113654.3.13.1026"]},"00200010":{"vr":"SH","Value":["RP1026"]},"00201206":{"vr":"IS","Value":["1"]},"00201208":{"vr":"IS","Value":["16"]}}]
- 通过域名的方式测试接口调用情况
- 查询patients信息:
curl -v "http://www.dicomweb-***.com/dcm4chee-arc/aets/DCM4CHEE/rs/patients?limit=21&includefield=all&offset=0"
正常情况下返回如下信息:
[{"00100010":{"vr":"PN","Value":[{"Alphabetic":"DOE^J1"}]},"00100020":{"vr":"LO","Value":["583295"]},"00100030":{"vr":"DA"},"00100040":{"vr":"CS","Value":["M"]}}]
- 查询PatientID为583295的studies信息:
curl -v "http://www.dicomweb-***.com/dcm4chee-arc/aets/DCM4CHEE/rs/studies?limit=21&includefield=all&offset=0&PatientID=583295"
正常情况下返回如下信息:
[{"00080020":{"vr":"DA","Value":["20170716"]},"00080030":{"vr":"TM","Value":["154736"]},"00080050":{"vr":"SH","Value":["MOF5026"]},"00080054":{"vr":"AE","Value":["DCM4CHEE"]},"00080056":{"vr":"CS","Value":["ONLINE"]},"00080061":{"vr":"CS","Value":["MR"]},"00080090":{"vr":"PN","Value":[{"Alphabetic":"NELL^FREDERICK^P^DR"}]},"00081190":{"vr":"UR","Value":["http://www.dicomweb-***.com/dcm4chee-arc/aets/DCM4CHEE/rs/studies/1.113654.3.13.1026"]},"00100010":{"vr":"PN","Value":[{"Alphabetic":"DOE^J1"}]},"00100020":{"vr":"LO","Value":["583295"]},"00100030":{"vr":"DA"},"00100040":{"vr":"CS","Value":["M"]},"0020000D":{"vr":"UI","Value":["1.113654.3.13.1026"]},"00200010":{"vr":"SH","Value":["RP1026"]},"00201206":{"vr":"IS","Value":["1"]},"00201208":{"vr":"IS","Value":["16"]}}]
- 上传DICOM数据:
echo -ne "\r\n--myboundary\r\nContent-Type: application/dicom\r\n\r\n" > mime.dicom.head
echo -ne "\r\n--myboundary--" > mime.tail
cat mime.dicom.head dicom-file1.dcm mime.tail > dicom.mime
curl -X POST -H "Content-Type: multipart/related; type=\"application/dicom\"; boundary=myboundary" http://www.dicomweb-***.com/dcm4chee-arc/aets/DCM4CHEE/rs/studies --data-binary @dicom.mime
正常情况下返回如下信息:
{"00081190":{"vr":"UR","Value":["http://www.dicomweb-***.com/dcm4chee-arc/aets/DCM4CHEE/rs/studies/2.25.69929638918751914792556351597790946979"]},"00081199":{"vr":"SQ","Value":[{"00081150":{"vr":"UI","Value":["2.25.326410046515557697819279767240864278552"]},"00081155":{"vr":"UI","Value":["2.25.117261743442166561672617116550216377921"]},"00081190":{"vr":"UR","Value":["http://www.dicomweb-***.com/dcm4chee-arc/aets/DCM4CHEE/rs/studies/2.25.69929638918751914792556351597790946979/series/2.25.144996685350575051252979153755370108609/instances/2.25.117261743442166561672617116550216377921"]}}]}}
- 配置访问鉴权。
默认情况下,支持匿名调用触发器函数,即任何人都可以发送请求来调用函数。请通过以下步骤配置访问鉴权,从而降低函数调用的风险。
- 在已创建函数的触发器管理中开启认证功能。具体操作,请参见触发器管理。
- 访问触发器函数。
- 通过默认域名访问触发器函数
以下以Python SDK通过默认域名调用触发器函数为例,其他语言访问触发器函数的示例,请参见使用SDK执行HTTP触发器函数。
import fc2
client = fc2.Client(
endpoint='http://13**.cn-shanghai.fc.aliyuncs.com',
# 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
accessKeyID = 'yourAccessKeyId',
accessKeySecret = 'yourAccessKeySecret'
params = {
'offset': '0',
'includefield': 'all',
'limit': '21',
}
req = client.do_http_request( "GET", "dicom.LATEST", "do", "dcm4chee-arc/aets/DCM4CHEE/rs/patients", headers={}, params=params)
print (req)
- 通过自定义域名访问触发器函数
# -*- coding: utf-8 -*-
import requests
import fc2
import email
fc_host = 'http://www.dicomweb-***.com'
fc_path = '/dcm4chee-arc/aets/DCM4CHEE/rs/studies'
client = fc2.Client(
endpoint='http://13**.cn-shanghai.fc.aliyuncs.com',
# 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
accessKeyID = 'yourAccessKeyId',
accessKeySecret = 'yourAccessKeySecret'
headers = {
'date': email.utils.formatdate(usegmt=True),
'content-type': 'application/json',
'content-length': '0',
}
params = {
'offset': '0',
'includefield': 'all',
'limit': '21',
}
headers['authorization'] = client.auth.sign_request("GET", fc_path, headers, unescaped_queries=params)
response = requests.get(fc_host + fc_path, headers=headers, params=params)
print (response)