最近一直在忙热线的项目,主要的业务是接收其他单位的单子,然后在本系统进行审批处理,最后把处理的结果以XML的形式反馈回原单位。数据交互主要用WebService技术,其实是给两家同时做接口,其中一家用WSDL推送数据,一家用WebService推送数据,我们反馈数据统一用WebService技术,用WinService定时推送符合条件的数据。想把整个开发和调试过程记录下来,但是不知道如何描述,想到哪写到哪吧,以后有时间再修改完善。

  第一次用VPN进行远程控制还是在上家公司,在IE浏览器中输入IP地址后要安装一个插件,还要把此IP地址加入兼容模式才能正常远程。这次用的是RealVNC(Virtual Network Computer)进行远程访问,RealVNC有客户端(vncviewer)和服务器端(vncserver),用vncviewer进行连接。注意:当长时间未操作远程桌面的时候,远程服务器会休眠,这时候鼠标无法操作,需要按F8进入菜单选项进行控制。

  

接口交互的步骤:

  1、仔细阅读接口文档,根据文档说明准备数据。(必填字段、字段类型、标记位、状态标识等需注意)

  2、他们通过调用我们提供的WebService地址,把数据以XML的形式发送过来,我们对一串XML格式的字符串进行解析保存进DataSet对象中,组织成一个DataTable对象,再把DataTable中的数据存入DTO实体对象中,最后通过StringBuilder拼接出一条长长的Insert语句,然后执行这条SQL语句把数据存入中间库。



public static DataSet XmlStringToDataSet(string xmlString)
        {
            xmlString = urnhtml(xmlString);
            if (!string.IsNullOrEmpty(xmlString))
            {
                XmlTextReader Xmlrdr = null;
                StringReader StrStream = null;
                try
                {
                    XmlDocument xmldoc = new XmlDocument();
                    xmldoc.LoadXml(xmlString);

                    DataSet ds = new DataSet();
                    StrStream = new StringReader(xmldoc.InnerXml);
                    Xmlrdr = new XmlTextReader(StrStream);
                    ds.ReadXml(Xmlrdr);
                    return ds;
                }
                catch(Exception ex)
                {
                    WriterTextLog.WriterLog("SaveAcceptInfo", "将XMLSTR转换成DATASET时出错,错误:" + ex.Message, "Error");
                    return new DataSet();
                }
                finally
                {
                    //释放资源
                    if (Xmlrdr != null)
                    {
                        Xmlrdr.Close();
                        StrStream.Close();
                        StrStream.Dispose();
                    }
                }
            }
            else
            {
                return null;
            }
        }



private static AcceptInfo YWPDInfo(DataTable dt)
        {
            string param = "param_TEXT";
            AcceptInfo info = new AcceptInfo();
            DataRow[] dr = null;
            dr = dt.Select("name = 'SERIAL_NUMBER'");
            if (dr.Length > 0)
                info.WPID = dr[0][param].ToString();
            dr = dt.Select("name = 'EXECUTE_DEPT'");
            if (dr.Length > 0)
                info.ACCEPTDEPARTMENT = dr[0][param].ToString();
            dr = dt.Select("name = 'D_JIEBAOSJ'");
            if (dr.Length > 0)
                info.DATE = DateTime.Parse(dr[0][param].ToString());
            dr = dt.Select("name = 'S_DENGLUZD'");
            if (dr.Length > 0)
                info.S_DENGLUZD = dr[0][param].ToString();
            return info;
         }



StringBuilder sqlSb = new StringBuilder();
                sqlSb.Append(" INSERT INTO  Accept (");
                sqlSb.Append("    WPID    ,");
                sqlSb.Append("    SERIALNUMBER    ,");
                sqlSb.Append("    DATE    ,");
                sqlSb.Append("    DATE1    ,");
                sqlSb.Append("    ACCEPTDEPARTMENT    ,");
                sqlSb.Append("    S_LIANXIDH)");
                sqlSb.Append("    VALUES");
                sqlSb.Append("    (");
                sqlSb.Append("'" + acceptInfo.WPID + "',");
                sqlSb.Append("'" + acceptInfo.SERIALNUMBER + "',");
                sqlSb.Append("'" + acceptInfo.DATE + "',");
                sqlSb.Append("'" + acceptInfo.DATE1 + "',");
                sqlSb.Append("'" + acceptInfo.ACCEPTDEPARTMENT + "',");
                sqlSb.Append("'" + acceptInfo.S_LIANXIDH + "')");

                string ConnStr = System.Configuration.ConfigurationManager.AppSettings["ConnString"];
                int backValue = SqlHelper.ExecuteNonQuery(ConnStr, CommandType.Text, sqlSb.ToString());



 

  3、信息审核程序从中间库中抓取数据放入正式库,同时对数据进行增删改查等操作,成功获取数据后要修改状态字段。

成功发送数据后要修改状态字段。

  

在开发过程中遇到的问题:

  1、有一家是用JAVA开发的,提供的是WSDL文件进行交互,我们需要把对应的WSDL生成C#可以识别的形式。在本地的话用VS自带的命令提示,通过敲命令就可以生成对应的.CS文件。但是如果服务器上没有安装VS的话,就要通过wsdl.exe程序进行生成。

  2、在本地部署Winservice可以直接利用一个小程序可以自动安装,在服务器上没有framework环境,或者framework版本不合适的话,就只能用dos命令安装Winservice了。

  3、调试WebService时,可以直接把项目设置为启动项,把某个服务文件设置为起始页,运行后在浏览器中输入XML字符串就可以调试了。

  4、调试Winservice时有些麻烦,首先要把项目设置为启动项,然后在服务管理器中打开对应的服务,在VS调试中选择附加进程,找到服务双击即可调试。