• 热线接口开发调试工作记录


      最近一直在忙热线的项目,主要的业务是接收其他单位的单子,然后在本系统进行审批处理,最后把处理的结果以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、信息审核程序从中间库中抓取数据放入正式库,同时对数据进行增删改查等操作,成功获取数据后要修改状态字段。

      4、数据处理完成后,WinService服务是一直在运行的,当发现有符合条件的数据后就取出来放入DTO实体对象中,把DTO对象放入多行两列的DataTable中,再通过循环把每一行数据组织成XML格式,然后回发给原单位,成功发送数据后要修改状态字段。

      

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

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

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

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

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

  • 相关阅读:
    23、mybatis学习——mybatis的二级缓存
    22、mybatis学习——mybatis的一级缓存
    21、mybatis学习——mybatis动态sql之<sql>抽取sql语句
    20、mybatis学习——<bind>绑定
    19、mybatis学习——mybatis的动态sql之<foreach>遍历传入的数组,集合和map
    18、mybatis学习——mybatis的动态sql之通过{<set>和<if>结合}或者{<trim>和<if>的结合}实现部分字段更新
    17、mybatis学习——mybatis的动态sql之<choose><when><otherwise>选择唯一条件
    16、mybatis学习——mybatis的动态sql之<if>、<where>和<trim>
    15、mybatis学习——鉴别器discriminator的使用
    [20181108]with temp as 建立临时表吗.txt
  • 原文地址:https://www.cnblogs.com/len0031/p/4141844.html
Copyright © 2020-2023  润新知