最近一直在忙热线的项目,主要的业务是接收其他单位的单子,然后在本系统进行审批处理,最后把处理的结果以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调试中选择附加进程,找到服务双击即可调试。