[Mono-list] Web Services and DataSet

Alessandro Galassi ale.galassi@libero.it
Wed, 03 Mar 2004 01:26:15 +0100


Hi,
I write a web Service with mono 0.29 and mon_mono 0.6  that return
a DataSet via a Odbc connection from MySQL and work fine.

Now I wont comsume the service and I write this test:
---------------------------------------------------------------------
1 : using System;
2 : using System.Data;
3 : public class DataSetTest
4 : {
5 :    static void Main(string[] args)
6 :    {
7 :         DataSet ds = new DataSet();
8 :         AuslWebServices ws = new AuslWebServices();
9 :         ds.Merge(ws.AuslDataSet("select * from generale"));
10:         ds.WriteXml("generale.xml");
11:    }
12: }
----------------------------------------------------------------------
I compile it with:

$ wsdl AuslWebServices.wsdl
WSDL proxy generator v0.1
Fetching AuslWebServices.wsdl
Writing file 'AuslWebServices.cs'
$ mcs -t:library AuslWebServices.cs
Compilation succeeded
$ mcs -r:AuslWebServices.dll -r:System.Data DataSetTest.cs

DataSetTest.cs(9) error CS1502: The best overloaded match for method
'void System.Data.DataSet.Merge (System.Data.DataRow[])' has some
invalid arguments
DataSetTest.cs(9) error CS1503: Argument 0: Cannot convert from 'object'
to 'System.Data.DataRow[]'
DataSetTest.cs(9) error CS1501: No overload for method `Merge' takes `1'
arguments
DataSetTest.cs(9) error CS8006: Could not find any applicable function
for this argument list
Compilation failed: 4 error(s), 0 warnings


So in the AuslWebService.cs the return value of .AuslDataSet() is
'object' not DataSet:
------------------------------------------------------------------------
   
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/AuslDataSet",RequestNamespace="http://tempuri.org/",ResponseNamespace="http://tempuri.org/",ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped,Use=System.Web.Services.Description.SoapBindingUse.Literal)]
    public virtual object AuslDataSet(string query) {
        System.Object[] results = this.Invoke("AuslDataSet", new
object[] {
            query});
        return ((object)(results[0]));
    }
                                                                                
    public virtual System.IAsyncResult BeginAuslDataSet(string query,
System.AsyncCallback callback, object asyncState) {
        return this.BeginInvoke("AuslDataSet", new object[] {
            query}, callback, asyncState);
    }
                                                                                
    public virtual object EndAuslDataSet(System.IAsyncResult
asyncResult) {
        System.Object[] results = this.EndInvoke(asyncResult);
        return ((object)(results[0]));
    }
------------------------------------------------------------------------

if I cast (DataSet) in line 9 the source compile but at runtime;

$ mono DataSetTest.exe

Unhandled Exception: System.InvalidCastException: Cannot cast from
source type to destination type
in <0x00084> .DataSetTest:Main (string[])

Please help me!
Alessandro