C#调用WebService实现区域卫生平台数据接口上传

来源 :科学与财富 | 被引量 : 0次 | 上传用户:mibaoaiai
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘 要: Webservice,又名Web服务,它是一种Web应用程序,是自包含、自描述、模块化的应用,可以在网络中被描述、发布、查找以及通过Web来调用,它是基于网络的、分布式的模块化组件,它执行特定的任务,遵守具体的技术规范,这些规范使得WebService能与其他兼容的组件进行互操作。
  Webservice具有平台无关性,编程语言无关性等特性。它可以被.net,java,delphi,powerbuilder,vc,c++,jbuilder等开发工具或语言所调用。本文通过C#调用WebService成功实现区域卫生平台数据接口上传。
  关键词: WebService;区域卫生平台;接口;上传
  前提条件
  1、接口文档:本例中使用的是根据《江苏省健康信息平台共享数据集(医疗+公共卫生部分)2018版V2.02》修订的接口文档。
  2、网络连通:要求医疗单位保证数据上传程序所在机器与数据中心机房网络的畅通。
  需求
  要求接口完成如下需求:1、每日产生的数据上传到区域卫生平台;2、自动定时执行;3、记录传送入参和返回结果到日志文件中。
  接口文件内容说明
  1、服务名称:VKT_UploadService
  2、接口地址:http://192.168.21.4:87/VKT_UploadService.asmx?wsdl
  3、入参及出参(略)
  过程分析
  1、完成数据集的对照,即完成药品、诊疗以及其他数据与本院数据的对照工作;
  2、引用WebService服务;
  3、创建每个业务所需的SQL语句,并构建入参;
  4、执行上传操作。
  详细步骤
  1、建立C#应用程序
  2、添加WebService服务:在“项目”菜单中选择“添加服务引用(S)…”,弹出“添加服务引用”对话框,在“地址”中填入接口地址,点击“前往”,系统会在服务栏加载对应的项目,并在备注中显示“在地址“http://192.168.21.4:87/VKT_UploadService.asmx?wsdl”处找到1个服务”,命名空间设置为:ServiceReference1,点“确定”完成设置。如图1示:
  图1
  图2
  3、数据对照(略)。
  4、界面控件定义
  建立界面如图2,控件参数见下表。
  表1
  5、详细代码:
  using System;
  using System.Collections.Generic;
  using System.ComponentModel;
  using System.Data;
  using System.Drawing;
  using System.Linq;
  using System.Text;
  using System.Windows.Forms;
  using 区域卫生平台接口.ServiceReference1;
  using System.IO;
  //变量定量
  public string LogStr = "";//日志变量
  public Int32 DTransSuccess = 0;//上传成功
  public Int32 DTransFail = 0;//上传失败
  string Lstr1="";//格式一头
  string Lstr2="";//格式一尾
  string Lstr3="";//格式二外頭
  string Lstr4="";//格式二外中
  string Lstr5="";//格式二内头
  string Lstr6="";//格式二内尾
  string Lstr7="";//格式二内部一
  string Lstr8="";//格式二内部二
  区域卫生平台接口.ServiceReference1.VKT_UpBusinessDataFromHosSoapClient myService = null;
  //格式一: [适用于无主从关系的记录] StrInit(string Vid, string Vstr)
  //格式二: [适用于主从关系的记录] StrInitSub(string Vid, string Vstr0),略
  //定义门急诊挂号信息函数UP_registerrecord(),共25个入参,略
  //执行上传,并将相关内容保存到日志文件中
  private void button1_Click(object sender, EventArgs e)
  {
  string jsonStr;
  jsonStr = this.textBox1.Text;
  LogStr=DateTime.Now.ToString() + ",上传区域卫生平台数据内容如下:"+this.textBox1.Text+"。\r\n";
  string Tmpstr;
  Tmpstr = myService.VKT_UploadService(jsonStr);//执行上传
  LogStr = LogStr + DateTime.Now.ToString() + ",返回结果如下:" + Tmpstr + "。\r\n";   Tmpstr =Tmpstr.Replace("\\r\\n", "\r\n").Replace("\\", "").Replace("\"", "");
  if (Tmpstr.Contains("success: 1"))
  {
  DTransSuccess++;//判断成功则计数加1
  }
  else
  {
  DTransFail ++; //判断失败则计数加1
  }
  this.richTextBox1.Text= Tmpstr;
  WriteLog(LogStr, (this.dtTpStart.Value.Date == this.dtTpEnd.Value.Date) ? this.dtTpStart.Value.ToShortDateString() + "_" + DateTime.Today.ToShortDateString().ToString() + ".log" : this.dtTpStart.Value.ToShortDateString() + "_" + this.dtTpEnd.Value.ToShortDateString() + "_" + DateTime.Today.ToShortDateString().ToString() + ".log");//写日志
  LogStr = "";
  }
  //写日志文件
  private void WriteLog(string Wstr,string strFilePath)
  {
  string Current;
  Current = Directory.GetCurrentDirectory();//获取当前根目录
  strFilePath = Current + "\\QYWSPT" +strFilePath;
  System.IO.FileStream fs = new System.IO.FileStream(strFilePath, System.IO.FileMode.Append);
  System.IO.StreamWriter sw = new System.IO.StreamWriter(fs, System.Text.Encoding.Default);
  sw.WriteLine( Wstr);
  sw.Close();
  fs.Close();
  }
  //生成门急诊挂号信息并执行上传
  private void button2_Click(object sender, EventArgs e)
  {
  DTransSuccess = 0;
  DTransFail = 0;
  OleDbConnection connORCL = new OleDbConnection(Properties.Settings.Default.connectionORCLString);//调Settings.settings 中的connectionORCLString对应的连接字符串
  string mySelectQuery = Properties.Settings.Default.Str0201;//调Settings.settings 中的Str0201对应的SQL语句
  mySelectQuery = String.Format(@mySelectQuery, this.dtTpStart.Value.ToShortDateString(), this.dtTpEnd.Value.ToShortDateString());
  OleDbConnection myConnection = new OleDbConnection(Properties.Settings.Default.connectionORCLString);
  OleDbCommand myCommand = new OleDbCommand(mySelectQuery, myConnection);
  myConnection.Open();
  OleDbCommand oledbcom = new OleDbCommand(mySelectQuery, myConnection);
  DataSet ds1 = new DataSet();
  OleDbDataAdapter adp = new OleDbDataAdapter(oledbcom);
  adp.Fill(ds1, "srctable");
  if (ds1.Tables["srctable"].Rows.Count > 0) //如果查詢记录数>0
  {
  this.toolStripProgressBar1.Value = 0;
  StrInit("0201", "registerrecord");
  int x = 1;
  toolStripStatusLabel1.Text = "共" + ds1.Tables[0].Rows.Count.ToString().Trim() + "条记录。";
  this.toolStripProgressBar1.Minimum = 0;
  this.toolStripProgressBar1.Maximum = ds1.Tables[0].Rows.Count;   this.toolStripProgressBar1.Step = 1;
  foreach (DataRow dw in ds1.Tables[0].Rows) //遍历每一行数据
  {
  int Cnum = ds1.Tables[0].Columns.Count;//取查询总列数
  string[] Vstr = new string[Cnum];
  //取当前行中的每一列数据存到Vstr数组中
  for (Int32 i = 0; i <= Cnum - 1; i++)
  {
  Vstr[i] = dw.ItemArray[i].ToString();
  }
  }
  //构建字符串,并调用UP_registerrecord函数
  this.textBox1.Text = Lstr1 + "\r\n{\r\n";
  this.textBox1.Text = this.textBox1.Text + UP_registerrecord(Vstr[0], Vstr[1], Vstr[2], Vstr[3], Vstr[4], Vstr[5], Vstr[6], Vstr[7], Vstr[8], Vstr[9], Vstr[10], Vstr[11], Vstr[12], Vstr[13], Vstr[14], Vstr[15], Vstr[16], Vstr[17], Vstr[18], Vstr[19], Vstr[20], Vstr[21], Vstr[22], Vstr[23], Vstr[24]);
  this.textBox1.Text = this.textBox1.Text + "\r\n}\r\n" + Lstr2;
  button1.PerformClick(); //调用上传按钮事件执行上传
  this.toolStripProgressBar1.Value++;
  toolStripStatusLabel1.Text = "共" + ds1.Tables[0].Rows.Count.ToString().Trim() + "条记录。正在上传第" + x.ToString().Trim() + "个患者记录,成功:" + DTransSuccess.ToString().Trim() + "个,失败:" + DTransFail.ToString().Trim() + "个。";
  x++;
  this.Refresh();
  }
  }
  else
  {
  toolStripStatusLabel1.Text = "没有记录。";
  }
  myConnection.Close();//關闭数据库连接
  myConnection.Dispose();
  DTransSuccess = 0;
  DTransFail = 0;
  }
  2、生成可执行文件
  在C#编译生成可执行文件,该文件位于当前工程目录bin\Debug下,若要定时执行,可在“任务计划”中添加任务计划,定时执行即可(注意执行完成后要将程序退出)。
  总结
  本文中采用WebService实现区域卫生平台数据接口上传功能,在实际开发过程中要注意以下几点:1、需要増加try…catch…异常捕获,以免程序异常报错;2、对于有主从结构的数据,可以按照先遍历主表,再根据主表的主键值,遍历从表的数据,最终生成主从结构的上传字符串,本例中不再赘述;3、为方便用户进行后期修改,本例中将SQL和连接字符串放在Settings.setting中作为可修改内容,具体文件为对应Debug目录中的“区域卫生平台接口.exe.config ”文件中;4、本系统在Windows XP SP3 + Microsoft Visual Studio 2010+ORACLE 10g环境下调试通过。
  参考文献
  [1]宋智军 邱仲潘,Visual C#2010从入门到精通,电子工业出版社,2011.1.
  [2]蔡月茹 柳西玲,Web Service基础教程,清华大学出版社,2005..6.
其他文献
摘 要: 在现代的信息社会中,信息呈现了爆炸式的增长态势,人们面对海量的信息,需要正确处理信息的处理,如何处理复杂的信息和数据是当前重要的课题,充分挖掘数据对我们有重要意义,因此,我们需要对数据挖掘技术在软件工程领域的应用进行基本分析。  关键词: 数据挖掘;技术分析;软件工程  1.引言  当前,社会经济以前所未有的速度狂奔,社会物质财富不断增加,信息技术的进步使得人们的生活模式和形态出现了巨大
小学英语是学生英语学习的启蒙阶段,对学生的终身学习起着重要的作用,而学好英语的首要条件就是必须掌握一定数量的单词.掌握大量,丰富的词汇,不仅可以增强学生记忆力,培养学
摘 要: 在国民经济快速发展的过程中,交通行业占据着非常重要的位置,直接影响着人们的生活质量和水平。随着车辆数量不断增多,对路面的荷载不断加大,公路的表面功能逐渐减弱,在一定程度上缩短了公路的使用寿命。必须对公路出现的各种问题进行分析,在针对实际情况的基础上,采取具有针对性的措施,对公路进行有效养护,提高公路的建设质量。本文对公路养护中稀浆封层技术的应用进行了详细的分析,具有一定的借鉴意义。  关
《上海集邮》2015年第12期欧博介绍了一枚普18的10分窄距信销票,其销戳日期为1981年11月23日19时,比王晋枫所言首印日期1982年3月15日早了4个多月。但我们仍未能确定其最早使
楼市一直有“金三银四”的说法,伴随着房产利好政策的频频出台,3月的温州楼市用“金三”来形容再合适不过。温州人炒房全国有名,多少人通过炒楼积攒了人生第一桶金,又有多少
辐射产生的自由基首先与双氧基反应生成过氧基,过氧基又与其他自由基反应而产生更稳定的过氧化物。这些反应可造成各种生物分子不可恢复的损坏。有人证明,半胱氨酸可作为化
视频网站以超大规模进行国际重大体育赛事报道,是从2008年北京奥运会开始的。当时CNTV(中国网络电视台)前身央视国际将北京奥运会大陆地区的新媒体转播权出售给10多家门户和
摘 要: 近年来,公路工程事业发展的非常迅速,在社会经济发展中占据着越来越重要的位置,直接影响着人们的日常生活。在施工的过程中,软土路基是不可避免的,需要充分意识到水泥搅拌桩技术的关键作用,按照规定的步骤,使公路质量得到最大程度的保障。本文对水泥土搅拌桩的加固机理、准备工作、具体应用和质量控制等进行了详细的分析,对实际的施工工作提供一定的借鉴。  关键词: 公路施工;水泥搅拌桩技术;质量控制;公路
摘 要:操作380V及以下电压等级壳式断路器,是供电抢修中较为常见的故障处理工作。但至今没有专门为操作380V及以下电压等级壳式断路器而设计的工器具。按照传统的操作380V及以下电压等级壳式断路器的方式,需要在按规定穿戴好防护用品后,戴绝缘手套直接试送。开关的本体会发生故障,直接试送,会因安全距离不足,故障开关产生的电弧会对人身造成伤害。如果采取另一种方式,使用10kV绝缘操作棒进行操作,这种方式
摘 要: 管理对于一个企业的发展至关重要,企业通过建立完善的管理制度,保障内部的稳定。文章以华北制药企业为例,分析了制药企业标准化管理的现状,指出了管理中存在的一些问题,并对标准化管理的改进提供了相应的策略。  关键词: 制药企业;标准化管理;改进策略  企业的标准化管理涉及到一个企业的方方面面,是对管理工作的加强体现。标准化指的是在一定的范围内获取最好的秩序和效益,统一使用条款,贯彻国家和行业的