[Mono-aspnet-list] When a web method returns DataTable the method generated in proxy class returns DataSet (Bug #360541)

Jan van der watt janvanderwatt at gmail.com
Thu Apr 16 19:42:16 EDT 2009


https://bugzilla.novell.com/show_bug.cgi?id=360541 indicates that this
problem was fixed, but I still see it on my Mono (2.4).

Am I doing something wrong, or must I "re-open" the bug?

Sample code below with extra details.



<%@ WebService Language="C#" Class="WebServiceDataTable" %>

using System;
using System.Data;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class WebServiceDataTable  : System.Web.Services.WebService {

    public bool HelloWorld(out DataTable result) {
        result = new DataTable("Name of table");
        return ( true );


<%@ Page Language="C#" %>

<%@ Import Namespace="System.Data" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

<script runat="server">
    // ===========================================================================
    protected void Page_Load(object sender, EventArgs e) {
        localhost.WebServiceDataTable ws = new localhost.WebServiceDataTable();
        DataTable table;
// Compiler error occurs on this line:
        bool success = ws.HelloWorld(out table);
        outcome.InnerHtml = "Success: Table name = " + table.TableName;

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>DataTable over WebService</title>
    <div id="outcome" runat="server">

You will get this error:

"The best overloaded method match for
`localhost.WebServiceDataTable.HelloWorld(out System.Data.DataSet)'
has some invalid arguments" where the code is called:

            DataTable table;
            bool success = ws.HelloWorld(out table);

As you can see, I supply a DataTable, but the error message implies I
should have supplied a DataSet. The web service definition is:

    public bool HelloWorld(out DataTable result) { ... }

which obviously doesn't specify a DataSet.

On MS.NET, this works fine.

To verify the parameter type on MS.NET, I specifically passed an
incorrect type as parameter, e.g.

    bool success = ws.HelloWorld(out result /* type is STRING, not
DataTable*/ );

and I get:

"The best overloaded method match for
'localhost.WebServiceDataTable.HelloWorld(out System.Data.DataTable)'
has some invalid arguments", which proves that MS.NET uses DataTable
for the parameter type, as expected.

More information about the Mono-aspnet-list mailing list