source
Visual FoxPro code:
CLEAR
SET MULTILOCKS ON
CLOSE DATABASES all
LOCAL loService1 AS "XML Web Service"
* LOCAL loService1 AS "MSSOAP.SoapClient30"
* Do not remove or alter following line. It is used to support IntelliSense for your XML Web service.
*__VFPWSDef__: loService1 = http://localhost/WebService1/Service1.asmx?WSDL , Service1 , Service1Soap
LOCAL loException, lcErrorMsg, loWSHandler
loWSHandler = NEWOBJECT("WSHandler",IIF(VERSION(2)=0,"",HOME()+"FFC\")+"_ws3client.vcx")
loService1 = loWSHandler.SetupClient("http://localhost/WebService1/Service1.asmx?WSDL", "Service1", "Service1Soap")
* Call your XML Web service here. ex: leResult = loService1.SomeMethod()
SecondsBefore=SECONDS()
retVal=loService1.GetOrderdetails()
elapsed0=SECONDS()-SecondsBefore
?"loService1.GetOrderdetails():",elapsed0
?
LOCAL oXA as XMLAdapter
oXA=CREATEOBJECT("XMLAdapter")
SecondsBefore=SECONDS()
oXA.Attach(retVal.Item(1),retVal.Item(0))
elapsed1=SECONDS()-SecondsBefore
?"XMLAdapter.Attach:",elapsed1
LOCAL oCA as CursorAdapter
oCA=CREATEOBJECT("CursorAdapter")
oCA.DataSourceType="XML"
oCA.SelectCmd="oXA.TAbles.Item(1)"
oCA.Alias="OrderDetails"
SecondsBefore=SECONDS()
IF !oCA.CursorFill()
AERROR(aerrs)
DISPLAY MEMORY LIKE aerrs
ENDIF
elapsed2=SECONDS()-SecondsBefore
?"Fill through XMLAdapter after Attach"
?"Time:",elapsed2
?"Records:",RECCOUNT("OrderDetails")
?"XMLSize",LEN(retVal.Item(1).xml)+LEN(retVal.Item(0).xml)
?"Total time:",elapsed1+elapsed2+elapsed0
retval=null
oXA.ReleaseXML(.T.)
USE IN OrderDetails
?
SecondsBefore=SECONDS()
retval=loService1.GetOrderdetails1()
elapsed0=SECONDS()-SecondsBefore
?"loService1.GetOrderdetails1():",elapsed0
?
SecondsBefore=SECONDS()
oXA.LoadXML(retval)
elapsed1=SECONDS()-SecondsBefore
?"XMLAdapter.LoadXML:",elapsed1
SecondsBefore=SECONDS()
IF !oCA.CursorFill()
AERROR(aerrs)
DISPLAY MEMORY LIKE aerrs
ENDIF
elapsed2=SECONDS()-SecondsBefore
?"Fill through XMLAdapter after LoadXml"
?"Time:",elapsed2
?"Records:",RECCOUNT("OrderDetails")
?"XMLSize",LEN(retVal)
?"Total time:",elapsed1+elapsed2+elapsed0
oXA.ReleaseXML(.T.)
USE IN OrderDetails
?
oCA.SelectCmd=retval
SecondsBefore=SECONDS()
IF !oCA.CursorFill()
AERROR(aerrs)
DISPLAY MEMORY LIKE aerrs
ENDIF
elapsed2=SECONDS()-SecondsBefore
?"Fill through XMLTOCORSOR with schema."
?"Time:",elapsed2
?"Records:",RECCOUNT("OrderDetails")
?"XMLSize",LEN(oCA.SelectCmd)
?"Total time:",elapsed2+elapsed0
USE IN OrderDetails
?
SecondsBefore=SECONDS()
retval=loService1.GetOrderdetails2()
elapsed0=SECONDS()-SecondsBefore
?"loService1.GetOrderdetails2():",elapsed0
?
oCA.SelectCmd=retval
SecondsBefore=SECONDS()
IF !oCA.CursorFill()
AERROR(aerrs)
DISPLAY MEMORY LIKE aerrs
ENDIF
elapsed2=SECONDS()-SecondsBefore
?"Fill through XMLTOCORSOR without schema."
?"Time:",elapsed2
?"Records:",RECCOUNT("OrderDetails")
?"XMLSize",LEN(oCA.SelectCmd)
?"Total time:",elapsed2+elapsed0
USE IN OrderDetails
Web Service code:
private String sqlCmd=
"SELECT * from Orderdetails"
+" UNION ALL SELECT * from Orderdetails"
+" UNION ALL SELECT * from Orderdetails";
[WebMethod]
public DataSet GetOrderdetails()
{
OleDbConnection nwindConn = new OleDbConnection("Provider=VFPOLEDB.1;"+
@"Data Source=C:\Program Files\Microsoft Visual FoxPro 8\"+
@"Samples\Northwind\Northwind.dbc;Collating Sequence=MACHINE");
OleDbCommand selectCMD = new OleDbCommand(sqlCmd, nwindConn);
OleDbDataAdapter OrderdetailsDA = new OleDbDataAdapter();
OrderdetailsDA.SelectCommand = selectCMD;
DataSet OrderDetailsDataSet=new DataSet("OrderDetailsDataSet");
OrderdetailsDA.Fill(OrderDetailsDataSet, "Orderdetails");
return OrderDetailsDataSet;
}
[WebMethod]
public String GetOrderdetails1()
{
OleDbConnection nwindConn = new OleDbConnection("Provider=VFPOLEDB.1;"+
@"Data Source=C:\Program Files\Microsoft Visual FoxPro 8\"+
@"Samples\Northwind\Northwind.dbc;Collating Sequence=MACHINE");
OleDbCommand selectCMD = new OleDbCommand(sqlCmd, nwindConn);
OleDbDataAdapter OrderdetailsDA = new OleDbDataAdapter();
OrderdetailsDA.SelectCommand = selectCMD;
DataSet OrderDetailsDataSet=new DataSet("OrderDetailsDataSet");
OrderdetailsDA.Fill(OrderDetailsDataSet, "Orderdetails");
StringWriter strXML=new StringWriter();
OrderDetailsDataSet.WriteXml(strXML,XmlWriteMode.WriteSchema);
return strXML.ToString();
}
[WebMethod]
public String GetOrderdetails2()
{
OleDbConnection nwindConn = new OleDbConnection("Provider=VFPOLEDB.1;"+
@"Data Source=C:\Program Files\Microsoft Visual FoxPro 8\"+
@"Samples\Northwind\Northwind.dbc;Collating Sequence=MACHINE");
OleDbCommand selectCMD = new OleDbCommand(sqlCmd, nwindConn);
OleDbDataAdapter OrderdetailsDA = new OleDbDataAdapter();
OrderdetailsDA.SelectCommand = selectCMD;
DataSet OrderDetailsDataSet=new DataSet("OrderDetailsDataSet");
OrderdetailsDA.Fill(OrderDetailsDataSet, "Orderdetails");
StringWriter strXML=new StringWriter();
OrderDetailsDataSet.WriteXml(strXML,XmlWriteMode.IgnoreSchema);
return strXML.ToString();
}