Function doesn't work with a WebService

levyuk

Well-known member
Joined
Jun 7, 2004
Messages
313
Location
Wales, UK
Programming Experience
3-5
Anyone know why this doesn't work.

VB.NET:
[size=2]<WebMethod(Description:=[/size][size=2][color=#800000]"Creates a new Shopping Cart"[/color][/size][size=2])> _
[/size][size=2][color=#0000ff]Function[/color][/size][size=2] makeCart([/size][size=2][color=#0000ff]ByVal[/color][/size][size=2] dt [/size][size=2][color=#0000ff]As[/color][/size][size=2] DataTable) [/size][size=2][color=#0000ff]As[/color][/size][size=2] DataTable
dt = [/size][size=2][color=#0000ff]New[/color][/size][size=2] System.Data.DataTable([/size][size=2][color=#800000]"Cart"[/color][/size][size=2])
dt.Columns.Add([/size][size=2][color=#800000]"Product"[/color][/size][size=2], [/size][size=2][color=#0000ff]GetType[/color][/size][size=2]([/size][size=2][color=#0000ff]String[/color][/size][size=2]))
dt.Columns.Add([/size][size=2][color=#800000]"Quantity"[/color][/size][size=2], [/size][size=2][color=#0000ff]GetType[/color][/size][size=2]([/size][size=2][color=#0000ff]Integer[/color][/size][size=2]))
dt.Columns.Add([/size][size=2][color=#800000]"Unit Cost (£)"[/color][/size][size=2], [/size][size=2][color=#0000ff]GetType[/color][/size][size=2]([/size][size=2][color=#0000ff]Decimal[/color][/size][size=2]))
[/size][size=2][color=#0000ff]Return[/color][/size][size=2] dt
[/size][size=2][color=#0000ff]End[/color][/size][size=2] [/size][size=2][color=#0000ff]Function[/color][/size]
 
[size=2][color=#0000ff][color=black]
[/color][/color][/size]

This is how I access it. The webservice works for adding two numbers together but not when I try this function. This is the error that I recieve "Error 4 Value of type 'System.Data.DataTable' cannot be converted to 'localhost.makeCartDT'. C:\Inetpub\wwwroot\Shopping\Default3.aspx.vb 13 41 C:\...\Shopping\
"

VB.NET:
[/color][/color][/size]
[size=2][/size][size=2][color=#0000ff]Dim[/color][/size][size=2] cart [/size][size=2][color=#0000ff]As[/color][/size][size=2] [/size][size=2][color=#0000ff]New[/color][/size][size=2] localhost.ShoppingCart
[/size][size=2][color=#0000ff]Dim[/color][/size][size=2] dt [/size][size=2][color=#0000ff]As[/color][/size][size=2] [/size][size=2][color=#0000ff]New[/color][/size][size=2] DataTable
[/size][size=2][color=#0000ff][color=#000000][size=2][color=#0000ff]Protected[/color][/size][size=2] [/size][size=2][color=#0000ff]Sub[/color][/size][size=2] Page_Load([/size][size=2][color=#0000ff]ByVal[/color][/size][size=2] sender [/size][size=2][color=#0000ff]As[/color][/size][size=2] [/size][size=2][color=#0000ff]Object[/color][/size][size=2], [/size][size=2][color=#0000ff]ByVal[/color][/size][size=2] e [/size][size=2][color=#0000ff]As[/color][/size][size=2] System.EventArgs) [/size][size=2][color=#0000ff]Handles[/color][/size][size=2] [/size][size=2][color=#0000ff]Me[/color][/size][size=2].Load
Session([/size][size=2][color=#800000]"Cart"[/color][/size][size=2]) = cart.makeCart(dt)
[/size][size=2][color=#0000ff]End[/color][/size][size=2] [/size][size=2][color=#0000ff]Sub
[/color][/size][/color][/color][/size][size=2][color=#0000ff][color=#000000]

Hopefully someone can help
Thanks
 
Actually any object that implement MarshalByRef or MarshalByValue can be transported through Webservice , so its hack that DataTable is not implemented those singnatures as i mentioned this prevent it to marhsal over network using services.
so you either have to use dataSet or your custom DataTable which implements the singatures.
 
Back
Top