问题描述
做了一个读取局域网内数据库的webservice,webservice提供给外网的应用程序使用运行之后,点击webservice网页中的方法连接,提示错误<?xmlversion="1.0"encoding="utf-8"?><stringxmlns="http://tempuri.org/"><bai_table><result>System.Data.OleDb.OleDbException:ErrorwhiletryingtoretrievetextforerrorORA-01019在System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionStringconstr,OleDbConnectionconnection)在System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptionsoptions,ObjectpoolGroupProviderInfo,DbConnectionPoolpool,DbConnectionowningObject)在System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnectionowningConnection,DbConnectionPoolGrouppoolGroup)在System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnectionowningConnection)在System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnectionouterConnection,DbConnectionFactoryconnectionFactory)在System.Data.OleDb.OleDbConnection.Open()在Service.getTaskInfo(DateTimestartTime,DateTimeendTime)位置d:我的文档VisualStudio2008WebSitesWebSite1App_CodeService.cs:行号41</result></bai_table></string>
我的代码如下(很简单,只想测试一下webservice能否使用)usingSystem;usingSystem.Web;usingSystem.Web.Services;usingSystem.Web.Services.Protocols;usingSystem.Xml;usingSystem.Data;usingSystem.Text;usingSystem.IO;usingSystem.Collections;usingSystem.Data.OleDb;[WebService(Namespace="http://tempuri.org/")][WebServiceBinding(ConformsTo=WsiProfiles.BasicProfile1_1)]//若要允许使用ASP.NETAJAX从脚本中调用此Web服务,请取消对下行的注释。//[System.Web.Script.Services.ScriptService]publicclassService:System.Web.Services.WebService{publicService(){//如果使用设计的组件,请取消注释以下行//InitializeComponent();}[WebMethod]publicStringgetTaskInfo(DateTimestartTime,DateTimeendTime){//创建新的XML对象XmlDocumentdoc=newXmlDocument();//导入指定xml文件doc.LoadXml("<bai_table>"+"</bai_table>");//获取XML对象的根节点XmlNoderoot=doc.DocumentElement;//数据库连接StringConnectionString=GetConnectString();OleDbConnectionconnection=newOleDbConnection(ConnectionString);StringQueryString="selectpk_task,vbillcode,task_no,dbilldate,vagentid,pk_deptdocfrombai_table"+"wheredr!=1anddbilldate>='"+startTime.ToString()+"'anddbilldate<='"+endTime.ToString()+"'";try{connection.Open();OleDbCommandcommand=newOleDbCommand();command.Connection=connection;command.CommandText=QueryString;OleDbDataReadersr=command.ExecuteReader();intrownum=0;while(sr.Read()){//每一次循环,先在根节点下面建立行节点,并且给行节点的行号赋值XmlElementrowelement=doc.CreateElement("rowelement");//行号赋值为rownum,在循环尾+1rowelement.SetAttribute("rowNo",rownum.ToString());//将行节点添加到根节点中root.AppendChild(rowelement);//给行节点添加每一个列节点并赋值XmlElementelem0=doc.CreateElement("pk_task");rowelement.AppendChild(elem0);Stringpk_task=sr["pk_task"].ToString();elem0.InnerText=pk_task;//....同上XmlElementelem1=doc.CreateElement("vbillcode");rowelement.AppendChild(elem1);Stringvbillcode=sr["vbillcode"].ToString();elem1.InnerText=vbillcode;//...同上XmlElementelem2=doc.CreateElement("task_no");rowelement.AppendChild(elem2);Stringtask_no=sr["task_no"].ToString();elem2.InnerText=task_no;//...同上XmlElementelem3=doc.CreateElement("dbilldate");rowelement.AppendChild(elem3);Stringdbilldate=sr["dbilldate"].ToString();elem3.InnerText=dbilldate;//...同上XmlElementelem4=doc.CreateElement("vagentid");rowelement.AppendChild(elem4);Stringvagentid=sr["vagentid"].ToString();elem4.InnerText=vagentid;//...同上XmlElementelem5=doc.CreateElement("pk_deptdoc");rowelement.AppendChild(elem5);Stringpk_deptdoc=sr["pk_deptdoc"].ToString();elem5.InnerText=pk_deptdoc;//将行num+1rownum++;}sr.Close();}catch(Exceptionex){XmlElementelem1=doc.CreateElement("result");elem1.InnerText=ex.ToString();root.AppendChild(elem1);}doc.Save(@"D:/WebServices/bai_table.xml");returndoc.OuterXml;}publicStringGetConnectString(){return"provider=MSDAORA;host=192.168.168.198;datasource=ORCL;userid=b;password=b";//return"DataSource=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.168.88)"//+"(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=orcl)));UserId=b;Password=b";}}
大家给帮忙看看吧,谢谢了
解决方案
本帖最后由 jiuzaixingdong 于 2012-06-10 17:09:08 编辑
解决方案二:
是不是连接串写的有问题呢
解决方案三:
没有人回答么
解决方案四:
把你的业务处理代码作为一个独立的类库,先单独测试(使用console或者桌面应用等都可以),不要从客户端去测试。特别是,webservice向客户端隐藏了异常机制,难以调试。
解决方案五:
现在本机测试一下是否能够正常连上数据库再在连接数据库的地方打个断点看看里面的值