WebService mit eigener Klasse als Parameter

StehtimSchilf

Erfahrenes Mitglied
Hi Forum

Ich möchte, dass mein Webservice ein Objekt einer selbstgeschriebenen Klasse übernimmt:

Code:
    <WebMethod(Description:="<b>returns info about your account</b>")> _
    Public Function getAccountInfo(ByVal customer As Customer) As GatewayResults
        Return CustomerManager.getAccountInfo(customer)
    End Function


Code:
Public Class Customer
   Private AccountID As Int32 = 0
   Private Username As String = ""
   Private MonthlyBill As Boolean = False
End Class

Bitte keine Hinweise, dass dies nonsense sein könnte. Ich habe im Client einen Web-Reference eingefügt und kann auf Clientseite auch schön ein Objekt "Customer" erstellen, doch wenn ich den WebService aufrufe, erhalte ich auf der Serverseite immer ein leeres Objekt.

Ich habe bereits mit
- Serializable() und SoapElement, XmlElement
- XMLRoot und XMLElement
herumgebastelt, aber irgendwie habe ich das ned zum Fliegen gebracht.

Kann mir jemand obiges Beispiel komplettieren?

Und dann noch dies:
Code:
    <WebMethod(Description:="<b>returns info about your account</b>")> _
    Public Function setRelation(ByVal customer As Customer, ByVal hallo As Hallo) As GatewayResults
        Return CustomerManager.setRelation(customer, hallo)
    End Function
Wie würde sowas gehen, wenn ich zwei eigene Objekte übergeben möchte?

cheerioh & 1000 Dank
SiS
 

StehtimSchilf

Erfahrenes Mitglied
Hi M4st3r

Danke für Deine prompte Antwort. Ich weiss jetz ehrlich gesagt nicht genau wie mir dies helfen soll? Mein Problem ist doch, dass eben das Objekt beim Server leer ist. Obwohl ich auf der Clientseite:

Code:
Dim webservice As CustomerWebServiceRef.WebService = New CustomerWebServiceRef.WebService()

Dim customer As CustomerWebServiceRef.Customer = New CustomerWebServiceRef.Customer()
customer.AccountID = 1
customer.Username = "Homer"
customer.MonthlyBill = false

MessageBox.Show(webService.getAccountInf(customer)

Explizit dem Objekt Werte setze, sind die Properties in der webmethod getAccounInfo() bereits leer (resp. auf default). Ich will ja keine leeren Werte übergeben? Sorry, ich hab heute Montag :)

Anmerkung: In der Klasse Customer sind die Properties natürlich public!

Danke Dir!
 

M4st3r

Erfahrenes Mitglied
...und die Attribute gesetzt?

Die WCF-Maschinerie serialisiert dir die Klasse nur wenn die Attribute vorhanden sind!
 

StehtimSchilf

Erfahrenes Mitglied
<EDIT>
heee funktioniert nun doch auf einmal (vielleicht habe doch die Web-Referenz nicht aktualisiert!) Ich muss noch ausprobieren, warum ich eine bestehende Klasse nicht mit diesen Attributen ausstatten kann... melde mich nochmals.....
</EDIT>


Jiu:

Code:
Imports Microsoft.VisualBasic
Imports System.Runtime.Serialization

<DataContract()> _
Public Class Customer

    Private intAccountID As Int32 = 0
    Private strUsername As String = ""
    Private blnMonthlyBill As Boolean = False

    <DataMember()> _
    Public Property AccountID() As Int32
        Get
            Return Me.intAccountID
        End Get
        Set(ByVal value As Int32)
            Me.intAccountID = value
        End Set
    End Property
    <DataMember()> _
    Public Property Username() As String
        Get
            Return Me.strUsername
        End Get
        Set(ByVal value As String)
            Me.strUsername = value
        End Set
    End Property
    <DataMember()> _
    Public Property MonthlyBill() As Boolean
        Get
            Return Me.blnMonthlyBill
        End Get
        Set(ByVal value As Boolean)
            Me.blnMonthlyBill = value
        End Set
    End Property
End Class

Zudem: Das setzt .NET 3.0 voraus, nicht? Jedenfalls läuft es mit dieser Erweiterung auf dem Live-System nicht (The file XXXXXX has not been pre-compiled, and cannot be requested.), da dort nur .NET 2.0 installiert ist.

Es kann doch nicht so schwierig sein, ein Objekt dieser Klasse meinem WebService zu übergeben? Und ja, ich habe natürlich den Web Service Referenz beim Client aktualisiert!

Nochmals Danke!
 
Zuletzt bearbeitet:

StehtimSchilf

Erfahrenes Mitglied
Oh Mann

Ich habe bei allen Properties die Klausel Set vergessen!

Set (ByVal value As String)
Me.strUsername = value '<--- das ist wichtig!
End Set

gangnagnangngnga! Schön ist heute Montag :) Und nun klappts sogar ohne DataContract!

Ich danke Dir für Deine Beihilfe!

cheeroh & Gruess
SiS