系统asp

asp.net  时间:2021-01-29  阅读:()
收稿日期:2003-08-30;修返日期:2003-12-05XMLWebServices技术在基本医疗保险系统中的应用曾雪梅,李志蜀(四川大学计算机学院,四川成都610065)摘要:讨论了如何采用XMLWebServices技术构建一个基本医疗保险信息系统.
首先描述系统的体系结构,然后介绍由ASP.
NET创建的XMLWebServices的工作原理,最后详细阐述了XMLWebServices技术在系统中的实现及其安全解决方案.
关键词:.
NET;XMLWebService;SOAP;基本医疗保险中图法分类号:TP393文献标识码:A文章编号:1001-3695(2004)10-0257-04ApplicationofXMLWebServicesinBasicMedicalInsuranceSystemZENGXue-mei,LIZhi-shu(CollegeofComputerScience,SichuanUniversity,ChengduSichuan610065,China)Abstract:ThispaperdiscusseshowtodesignabasicmedicalinsurancesystemwithXMLWebServicestechnology.
Itde-scribesthesystemstructuresatfirst,andthendepictshowtheASP.
NETServiceswork.
Lastly,therealizationofXMLWebServicestechnologyinthesystemandthesystemsecuritysolutionarediscussed.
Keywords:.
NET;XMLWebService;SOAP;BasicMedicalInsuranceSystem社会医疗保险是医疗改革事业的必经之路.
为保障职工基本医疗,国务院提出了在全国范围内建立城镇职工基本医疗保险制度的决定.
所以,各地建设医疗保险管理信息系统的任务就变得十分迫切.
为了配合我国职工基本医疗保险制度改革,提高医疗保险管理和社会化服务水平,推动社会保险管理信息系统的一体化建设进程,更好地贯彻《国务院关于建立城镇职工基本医疗保险制度的决定》,我们着手进行了城镇职工基本医疗保险信息系统的开发.
系统采用基于XML的WebService技术.
WebService技术是一种基于标准的Web协议的可编程组件.
可以把WebService看作Web上的组件,Web服务提供者开放一系列API,开发人员可以通过调用这些API来集成Web服务,构建自己的应用程序.
它具有:语言和平台无关性、完好的封装性、松散耦合性、开放性.
WebServices可以与其他WebServices进行交互,支持CORBA,EJB,DCOM等多种组件标准.
在企业组织内部、跨企业、跨Internet的各种实际应用中得到广泛应用.
1系统设计结合我国基本医疗保险事业的实际情况,系统分为参保登记管理、费用征集管理、费用结算管理、财务管理、药店消费、门诊消费、住院消费、补充医疗保险管理、公务员管理、IC卡管理、系统参数管理、系统管理、社保统计分析、社保决策支持几大模块.
采用B/S结构和C/S结构相结合的方式进行开发.
对药店消费、门诊消费、住院消费系统,采用B/S四层结构,而对医保中心的参保管理、系统参数管理、费用结算管理、费用征集管理等模块则采用C/S三层结构.
其体系结构如图1所示.
图1系统的体系结构C/S结构的客户端通过在本地生成的Web服务代理和应用服务器通信,主要负责向应用服务器发送用户数据和接收应用服务器返回的业务数据,并进行简单的业务逻辑处理.
B/S结构的客户端使用传统的Web浏览器,只需向Web服务器发出服务请求.
浏览器通过URL或页面上的链接向Web服务器请求某个ASP.
NET页面(*.
aspx页面).
Web服务器采用IIS配置.
它处理客户端浏览器的服务请求.
Web服务器首先对客户端请求进行安全性验证,然后解析所请求的页面,如果该请求需要访问应用服务器上的XMLWebServices所提供的某项功能,那么Web服务器就通过Web服务代理访问该项功能,然后对返回结果进行处理,再动态生成结果页面返回给客户端浏览器.
应用服务器是本系统的关键.
医疗保险系统的各项业务功能都在这一层实现.
它由多个XMLWebServices组成,每个XMLWebServices实现一个或多个医疗保险系统的功能,这些XMLWebServices之间还可相互访问,以实现代码的可重用性,节约系统资源,提高系统性能.
数据库服务器负·752·第10期曾雪梅等:XMLWebServices技术在基本医疗保险系统中的应用责提供本地或远程数据库连接,存储基本医疗保险系统所产生的业务数据.
系统采用Oracle9i作为系统数据库服务器.
在该医保系统的部署上,我们把Web客户端部署在各定点机构(如医院、门诊、药店)的终端上;Windows客户端部署在医保中心各科室部门的终端上;Web服务器、应用服务器、数据库服务器部署在一个统筹区的医保中心.
2系统实现2.
1ASP.
NETWebServices的工作原理实现WebServices的方法有很多,本医保系统采用ASP.
NET的WebMethods框架来实现WebServices.
ASP.
NET有一个特殊的IhttpHandler类,为用户提供所需的XML,XSD,SOAP,WSDL样板文件(Boilerplate).
这使用户在创建WebService时,无须关心各种底层的细节问题(如HTTP,SOAP,WSDL等),将注意力迅速集中在服务本身提供的功能上.
WebMethodsFramework实现将SOAP消息映射到一个.
NET类的方法上.
通过在创建的公有方法前标注上属性(该属性归属名称空间System.
Web.
Services)来创建Web方法.
正确编译部署后,就可以通过.
asmx网络标志地址(Endpoint)暴露出创建的WebServices方法.
在.
asmx文件中包含如下的说明:,这个说明使.
asmxhandler从shhc.
MyService类去搜寻WebMethods及相关信息.
消息是通过IIS传递给.
asmxhandler的.
当传入的HTTP消息到达80端口时,IIS根据IISMetabase中的信息决定选择哪一个ISAPDLL来处理接收到的消息.
.
NET根据系统的扩展映射关系将.
asmx扩展映射到Aspnet_isapi.
dll.
Aspnet_isa-pi.
dll是由.
NETFramework提供的标准ISAPI扩展,它简单地将HTTP请求传给独立的工作进程Aspnet_wp.
exe.
Aspnet_wp.
exe定位CLR(CommonLanguageRuntime)和.
NETHTTP管线.
消息送入.
NETHTTP管线后,管线就按给定的扩展在配置文件中寻找匹配的IhttpHandler类.
我们可以在Machine.
config文件中发现,httpHandler用于映射.
asmx文件.
Ma-chine.
config文件中的相关内容如下:net>因此,当一个消息进入.
NETHTTP管线并指向.
asmx文件时,管线调用WebServiceHandlerFactory类以实例化一个新的WebServiceHandler对象,并使用该对象处理收到的请求(调用IhttpHandlerProcessRequest方法).
WebServiceHandler对象打开.
asmx文件找到包含WebMethods的类名.
余下的任务可以分成以下三个过程:(1)消息调度.
asmxhandler找到所需.
NET类后,从收到的消息中判断该类中的哪一个Web方法被调用.
在收到的消息中有两条重要的信息:①SOAPActionHeader或需求元素名(如soap:body元素中的元素名);②发送者要调用的方法名.
默认情况下,.
asmxhandler用SOAPActionHeader的值对消息进行发送.
.
asmxhandler从消息中寻找SOAPActionHeader,然后根据.
NET映射,搜索被调用类中的方法.
搜索只针对类中的标记有属性的方法.
如果我们没有在类中的方法上明确定义SOAPAction的值,.
asmxhandler则假定SOAP-Action值为WebService的名称空间和紧跟在后面的方法名的组合.
在没有定义名称空间的情况下,Handler把Http://tem-puri.
org作为默认值.
因此一个名为MyMethod的Web方法默认的SOAPAction值为Http://tempuri.
org/mMyMethod.
如果.
asmxhandler不能从收到的HTTP消息中找到匹配的SOAP-Action,则抛出一个异常.
因此,.
asmxhandler收到HTTP消息后的首要任务是把消息调度给对应的WebMethod.
然而在实际调用方法之前,需要将收到的XML消息映射为.
NET对象.
(2)映射XML为对象WebMethodHandler找到要调用的方法后,就需要将XML消息反序列化为.
NET对象.
随着消息的调度,Handler通过反射搜索类以决定如何处理收到的XML消息.
类XmlSerializer(名称空间System.
xml.
serialization下)自动完成XML和.
NET对象之间的映射.
XmlSerializer可以将任何公有的.
NET类型映射为XML框架类型,完成.
NET对象和XML实例文档之间的相互映射.
.
asmxhandler采用SOAPDocument/Literal方式实现和描述映射.
因此,WSDL的定义包含描述SOAP消息请求和响应元素的LiteralXMLSchema定义.
.
asmxhandler除了可以反序列化的参数,还可以反序列化/序列化SOAPHeader.
由于SOAPHeader没有与某个确定的WebMethod相关联,因此,处理方式与对参数的处理不同,SOAPHeader在中间层处理.
序列化引擎隐藏了所有用户定制句柄需要编写的XMLAPI代码.
这使得WebMethods不必关心SOAPHeader的处理.
(3)WSDL和文档的自动生成当我们创建和应用一个WebMethod时,客户端需要知道SOAP消息的确定格式,以便和WebMethod进行通信.
提供WebService描述的标准方法是WSDL.
为提高WebMethod的自适应性,.
asmxhandler自动生成一个WebMethod文档页,该页具有较好的可读性,并用WSDL对WebMethod的接口进行准确的描述.
如果我们用浏览器查看.
asmx文件,可以看到一个可读性较好的文档页面.
文档页是由DefaultWsdlHelpGe-nerator.
aspx(这个文件通常放在c:\Winnt\Mircosoft.
NET\Framework\version\config下)生成.
打开这个文件,可以发现,只有使用标准的.
NET框架的ASP.
NET页面才能产生我们所看到的文档页.
这个特性使我们的代码和文档可以保持同步.
如果一个客户向.
asmx终端发出一个GET请求,该请求在Querystring中带有"wsdl",则.
asmxhandler产生一个WSDL定义,而不是一个可读的文档.
客户端可以使用WSDL定义创建代理类(使用.
NET中的Wsdl.
exe),创建的代理类可自动完成对WebService的访问和通信.
2.
2WebServices的创建首先,我们要创建XMLWebServices以实现医保系统的主要和关键部分.
创建XMLWebServices类似于创建任何提供对其应用程序逻辑的编程访问的组件.
创建XMLWebSer-vices需要某个构成可公开的服务功能、定义如何使用服务的服务说明以及支持接收和处理请求并发送响应的基础结构.
根·852·计算机应用研究2004年据系统的各功能模块的划分,我们分别建立相应的XMLWebServices.
在ASP.
NET中构建XMLWebServices的过程包括两个步骤,声明一个XMLWebService和定义XMLWebService的接口方法.
首先,使用ASP.
NETWeb服务项目模板创建一个XMLWebServices(这里选择VB作为编程语言),然后,实现XMLWebServices.
实现的过程即是在继承System.
Web.
Services.
WebService的用户类中创建WebMethods的过程.
通过单位名称查询单位基本信息的Web方法的实现代码如下:ImportsSystem.
Web.
ServicesPublicClassmyService911InheritsSystem.
Web.
Services.
WebServicePublicFunctionQueryDw_by_Name(byvalm_Nameasstring)Asstring′输入参数:单位名称(m_Name)′输出:名称为m_Name的单位的基本信息(格式为XML字符串)′功能:通过单位的名称查询单位的基本信息EndFunction成功创建WebMethods后,WebService的实现代码至少由一个类组成,该类继承System.
Web.
Services.
WebService,存放在一个同名的.
asmx文件中.
在类中可以添加WebMethod方法或其他非WebMethod方法.
在方法前要声明为WebMethod的方法才能被客户端访问.
采用.
NETFramework中的APS.
NET构筑WebService的功能,可以不必专注于WebService中使用到的各种底层的细节问题(如HTTP,SOAP,WSDL等),而将注意力集中在服务本身提供的功能上.
在ASP.
NET中,一个WebService被实现为一个类,通过指定该类的某些成员函数是服务的接口,来暴露给WebService的请求者,从而为请求者提供服务在调试模式下运行XMLWebServices,从运行得到的Web页中测试每一个WebMethods.
编译成功后,将XMLWebServices部署到应用服务器上.
2.
3XMLWebServices的使用首先,创建XMLWebServices的代理类(通过.
NET的Ws-dl.
exe方法),然后将XMLWebServices代理编译到程序集中,包括System.
XML.
dll和System.
Web.
Services.
dll程序集以及创建的代理.
也可通过在WebApplication或WindowsApplica-tion中添加Web引用,自动创建代理类及相关引用,然后创建所需的Web窗体(B/S结构的Web服务器)或Windows窗体(C/S结构的客户端).
在客户端代码中创建代理类的实例,通过该实例调用与XMLWebServices方法通信的代理类的方法.
具体的实现如下:DimmyCounterDwAsNewmyService911()DimDwname,strInfoAsStringTryStrInfo=myDwmyService.
QueryDw_by_Name(Dwname)′获取指定名称(Dwname)的单位信息(XML字符串)CatchexasSystem.
Web.
Services.
Protocols.
SoapException′处理因服务丢失引发的异常CatchexasException′处理其他异常Endselect′返回错误信息EndTry最后,部署该Web窗体.
将XMLWebServices代理程序集部署到部署Web窗体的Web应用程序下的\Bin目录中.
2.
4对数据库的访问整个医疗保险系统是以数据库为基础的,系统中经常需要进行频繁而短暂的数据库连接.
为了访问数据库,用户需要建立与数据库的连接.
ASP.
NET采用OLEDB连接Oracle数据库,系统开销比较大.
当系统连接的用户数较多时,会严重影响系统的性能.
本医保系统的解决方案是在XMLWebServ-ices和数据库之间建立称为连接池的中间件来管理所有的连接.
当用户需要访问数据库时,向连接池提出一个申请,执行数据访问的操作,然后释放这个连接,但连接池并不关闭这个空闲的连接,而是将空闲的连接继续提供给其他客户使用,避免创建连接的开销.
用这种方法来提高医保系统的性能.
连接池管理的连接数是有限的,可能造成一些请求受阻,因此应根据系统的实际情况仔细地设置连接池可管理的连接数.
系统中,我们创建了一个DBConnectionPool静态类来创建和管理数据库连接池.
成员变量如下:PrivateSharedsqlConnections()AsSystem.
Data.
OleDb.
OleDbCon-nection′数据库连接池数组,用于保存创建的与数据库的连接PublicSharedisInitedAsBoolean′是否初始化标志PrivateisUsed()AsBoolean′是否被使用标志PrivateConnectionStringAsString′连接字符串Privatemax_connectionsAsInteger′数据库连接池提供的最大连接数PrivatecountAsInteger′当前数据库连接数构造函数New(ByValconnStringAsString,OptionalByValmaxAsInteger)初始化类成员变量,InitPool()初始化连接池,返回一个布尔型,AttachPool()返回一个可用的连接,Detach-Pool(ByRefconnAsSystem.
Data.
OleDb.
OleDbConnection)释放一个连接,Finalize()析构函数,释放所有连接.
初始化数据库连接池时需要访问数据库的连接字符串,它包括驱动器名称、用户名和密码,以及连接池类可管理的连接数据等.
连接串代码如下:DimUserPwdAsString="zxm"DimUserIdAsString="zxm"DimServerNameAsString="insure01"DimstrConnectionString="Provider=MSDAORA.
1;Password=&UserPwd&;UserID=&UserId&;DataSource=&ServerName&;"2.
5系统的安全性基本医疗保险系统中涉及对参保人个人账户的充值和使用以及对国家基金的使用等.
如果系统遭到意外攻击,可能会使参保人的利益受到损害,甚至会使国家基金流失.
因此,在医保系统中对安全性的考虑是非常重要的.
在Intranet方案中,可以使用Windows身份验证,对自己域中的用户进行身份验证.
医保系统是在Internet上的,需要使用SQL语句对数据库操作来执行自定义身份验证和授权.
这里,客户端向服务传递自定义的凭据(如用户名和密码),并让服务自己处理身份验证和授权.
Windows身份验证机制通过HTTP传输,SOAP独立地传输.
使用ASP.
NET生成的XMLWebServices通过HTTP使用SOAP.
因此,在医保系统中创建自定义身份验证机制,将身份验证从传输分离.
我们通过在SOAP标头中传递身份验证凭据实现.
这里,在服务中定义一个从SOAPHeader派生的类,其名称与SOAP标头的根元素匹配,添加公共字段或属性(通常为用户名和用户密码),与SOAP标头中每个元素的名称和它们各自的数据类型匹配,将公共成员添加到实现表示SOAP标头类型的XMLWebServices的类.
将SoapHeader属性应用于要处理SOAP标头的每个XMLWebServices方法.
将SoapHeader特性的MemberName属性设置为第一步中创建的成员变量的名称.
在应用SoapHeader特性的每个XMLWebServices方法中,访问在第一步中创建的成员变量以处理·952·第10期曾雪梅等:XMLWebServices技术在基本医疗保险系统中的应用在SOAP标头中发送的数据.
然后创建一个该类型的标头实例.
最后在每一个需要访问该标头的Web方法进行标注.
实现的代码如下:ImportsSystem.
Web.
ServicesImportsSystem.
Web.
Services.
Protocols′自定义用户凭据类UsernameToken(继承SOAPHeader类)PublicClassUsernameToken:InheritsSOAPHeaderPublicUsernameAsStringPublicPasswordAsStringEndClassPublicClassHeaderService:InheritsWebServicePublicsHeaderAsUsernameToken′创建UsernameToken类对象/实例,验证用户凭据PublicFunctionSec-ureValidateMethod()AsStringIf(sHeaderIsNothing)′客户端未传入标头的处理Return"ERROR:Pleasesupplycredentials"Else′客户端传入标头的处理.
.
.
′访问数据库,从数据库中的信息验证用户名称(sHeader.
Use-rname)和密码(sHeader.
Password)是否存在和正确Return"USER:"&sHeader.
UsernameEndIfEndFunctionWebMethodAttribute(Description="Thismethodrequiresacustomsoapheadersetbythecaller")SoapHeaderAttribute("sHeader")publicstringSecureMethod(){if(sHeader==null)return"ERROR:Pleasesupplycredentials";elsereturn"USER:"+sHeader.
Username;}…EndClassimportSystem.
Web.
Services;importSystem.
Web.
Services.
Protocols;//AuthHeaderclassextendsfromSoapHeaderpublicclassAuthHeaderextendsSoapHeader{publicvarUsername:String;publicvarPassword:String;}publicclassHeaderServiceextendsWebService{publicvarsHeader:AuthHeader;…}客户端在调用要求标头的方法之前,直接在代理类上设置标头,实现代码如下所示:DimhAsNewHeaderServiceDimmyHeaderAsNewUsernameTokenmyHeader.
Username="zxm"myHeader.
Password=myMd5.
MD5Hash("zxmPasswd")′对密码的加密h.
UsernameToken=myHeaderDimresultAsString=h.
SecureValidateMethod()在不作任何处理的情况下,文本是以清楚可读的文本方式(不是安全的)通过网络发送的,这对医保系统来说,这种明文形式是不安全的,需要添加加密算法.
系统中,我们使用消息摘要5(MD5)哈希摘要传输和存储密码.
使用MD5算法对传输的用户密码进行散列运算,并与库中的对应值比较,检查它们是否相等.
由于md5.
ComputeHash()方法的输入和输出参数都是byte型数组,而客户端的输入和服务器端的接收都为String类型,所以,我们要将进行类型转换.
实现代码如下:PublicclassmyMd5PublicSharedFunctionMD5Hash(ByValstrAsString)AsString′求字符串长度.
自定义函数util.
StrLenstrlen()方法实现求字符串的长度,中文字符占两位DimlenAsInteger=util.
StrLen(str)Dimbuf(len-1),buf2()AsByteDimi,p,chAsIntegerDimi,cAsInteger′将字符串类型转换位为byte型数组util.
S2B(str,buf,str.
Length())p=0Fori=0Tolen-1ch=Asc(str.
Chars(i))Ifch>126OrchNET高级编程[M].
康博.
北京:清华大学出版社,2002.
[2]李海,龚学纲,李文亮.
深入研究VisualBasic.
Net[M].
北京:电子工业出版社,2003.
[3]数据库连接池技术浅谈[EB/OL].
http://www.
king-win.
net/soft_skill/soft000001.
htm,2002-05.
[4]DougTidwell,JamesSnell,PavelKulchenko.
ProgrammingWebServiceswithSOAP[M].
O′Reilly,2001.
12.
[5]MarcoBellinaso,etal.
ASP.
NETWebsiteProgramming:Problem-De-sign-Solution,VB.
NETEdition[J].
Wrox,2002,12.
[6]HowASP.
NETWebServicesWork[EB/OL].
http://msdn.
microsoft.
com/webservices/,2003-05.
[7]SecurityinaWebServicesWorld:AProposedArchitectureandRoad-map[EB/OL].
http://msdn.
microsoft.
com/webservices/,2002.
作者简介:曾雪梅(1976-),女,四川德阳人,硕士研究生,主要研究方向为计算机网络与信息系统;李志蜀(1946-),男,四川成都人,博士生导师,主要研究方向为计算机网络、智能控制.
·062·计算机应用研究2004年第10期

Boomer.Host(年付3.5美)休斯敦便宜VPS

Boomer.Host是一家比较新的国外主机商,虽然LEB自述 we’re now more than 2 year old,商家提供虚拟主机和VPS,其中VPS主机基于OpenVZ架构,数据中心为美国得克萨斯州休斯敦。目前,商家在LET发了两款特别促销套餐,年付最低3.5美元起,特别提醒:低价低配,且必须年付,请务必自行斟酌确定需求再入手。下面列出几款促销套餐的配置信息。CPU:1core内存:...

青果网络618:洛杉矶CN2 GIA/东京CN2套餐年付199元起,国内高防独服套餐66折

青果网络怎么样?青果网络隶属于泉州市青果网络科技有限公司,青果网络商家成立于2015年4月1日,拥有工信部颁发的全网IDC/ISP/IP-VPN资质,是国内为数不多具有IDC/ISP双资质的综合型云计算服务商。青果网络是APNIC和CNNIC地址分配联盟成员,泉州市互联网协会会员单位,信誉非常有保障。目前,青果网络商家正式开启了618云特惠活动,针对国内外机房都有相应的优惠。点击进入:青果网络官方...

ThomasHost(月付5美元)美国/法国/英国/加拿大KVM,支持Windows

ThomasHost域名注册自2012年,部落最早分享始于2016年,还算成立了有几年了,商家提供基于KVM架构的VPS,数据中心包括美国、法国、英国、加拿大和爱尔兰等6个地区机房,VPS主机套餐最低2GB内存起步,支持Windows或者Linux操作系统,1Gbps端口不限制流量。最近商家提供了一个5折优惠码,优惠后最低套餐月付5美元起。下面列出部分套餐配置信息。CPU:1core内存:2GB硬...

asp.net为你推荐
操作httpmagentomagento是哪年开发出来的,伴随着什么系统,整体运行效果,同类型的系统?新iphone也将禁售iPhone8plus在2020年还会有货吗ym.163.com免费企业邮箱www.topit.mehttp://www.topit.me/ 中自己上传的照片如何删除95188是什么电话95188是什么号码我刚收到短信是什么支付宝的验证码闪拍网闪拍网之类的网站怎么回事?灌水机什么是论坛灌水机?在哪里可以下载到呢?工具条手机的工具栏怎么在任务栏里?怎么把工具栏调到手机下面?地址栏图标地址栏中网址前面的图标代表着什么?
新通用顶级域名 老鹰主机 美元争夺战 电子邮件服务器 刀片式服务器 国外免费asp空间 hktv 支付宝扫码领红包 香港新世界中心 免费asp空间申请 成都主机托管 宿迁服务器 卡巴斯基试用版下载 空间排行榜 2016黑色星期五 qq空间打开很慢 webmin hosting 带宽测速 web服务器有哪些 更多