//Edit: Fehler gefunden. In der Klasse "cBuildings" muss folgendes Atribut hinzugefügt werden:
und vor den entsprechenden membern muss "[DataMember(IsRequired = true)]" vorstehen
Hallo,
ich habe mich nun mal an das Thema "WCF" gewagt (Windows Communication Foundation) //Info: Bislang nur die Basics input.
Soweit funktioniert alles, übergabe Parameter klappen, Rückgabewerte usw.
Nun habe ich aber folgende Problemstellung:
Auf dem Client habe ich eine lokale Variable von der Klasse Gebäude (Storage.Building)
diese ist als List<CBuildings> aufgebaut.
Will ich diese vom Server abrufen, funktioniert es soweit (diese wird auf der SERVER SEITE Initialisiert, und
auf dem Client dann entsprechend zugewiesen) - funktioniert.
Wenn ich nun auf dem Client, in der Liste, ein Gebäude hinzufügen will(ist eine Unterklasse von CBuildings),
funktioniert auch alles soweit. Wenn ich diese jedoch an den Server senden möchte, erhalte ich folgende Fehlermeldung:
Server:
Die klasse ist als " [Serializable()]" entsprechend gekennzeichnet.
Client:
Für mich stellt sich die Frage, warum es hier nicht funktioniert, aber bei anderen Klassen schon(einziger Unterschied ist,
dass ich dort keine List<> übergebe)
Hat jemand eine Idee ode rein Tipp, wie ich das Problem lösen könnte ?
Gruß
und vor den entsprechenden membern muss "[DataMember(IsRequired = true)]" vorstehen
Hallo,
ich habe mich nun mal an das Thema "WCF" gewagt (Windows Communication Foundation) //Info: Bislang nur die Basics input.
Soweit funktioniert alles, übergabe Parameter klappen, Rückgabewerte usw.
Nun habe ich aber folgende Problemstellung:
Auf dem Client habe ich eine lokale Variable von der Klasse Gebäude (Storage.Building)
diese ist als List<CBuildings> aufgebaut.
Will ich diese vom Server abrufen, funktioniert es soweit (diese wird auf der SERVER SEITE Initialisiert, und
auf dem Client dann entsprechend zugewiesen) - funktioniert.
Wenn ich nun auf dem Client, in der Liste, ein Gebäude hinzufügen will(ist eine Unterklasse von CBuildings),
funktioniert auch alles soweit. Wenn ich diese jedoch an den Server senden möchte, erhalte ich folgende Fehlermeldung:
Fehler beim Deserialisieren von Parameter tempuri.org/:Buildings. Die InnerException-Nachricht war "Der Typ 'Server.BigHaus' mit dem Datenvertragsnamen 'BigHaus:schemas.datacontract.org/2004/07/Server' wird nicht erwartet.....
Server:
C#-Quellcode
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.ServiceModel;
- namespace Server
- {
- [ServiceContract]
- public interface Interface
- {
- [OperationContract]
- string setBuildings( List<CBuildings> Buildings );
- }
- }
- //Library
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace Server
- {
- class Library:Interface
- {
- public string setBuildings( List<CBuildings> Buildings )
- if (cStorage.Buildings == null)
- cStorage.Buildings = new List<CBuildings>();
- cStorage.Buildings = Buildings ;
- return "OK"; // only for debug
- }
- public List<CBuildings> getBuildings()
- {
- if (cStorage.Buildings == null)
- cStorage.Buildings = new List<CBuildings>();
- return cStorage.Buildings;
- }
- }
- }
- //cStorage
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace Server
- {
- public static class cStorage
- {
- // diese wird beim "Anmelden des Clients" als new deklariert
- public static List<CBuildings> Buildings;
- }
- }
Die klasse ist als " [Serializable()]" entsprechend gekennzeichnet.
Client:
C#-Quellcode
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace tmp
- {
- [Serializable()]
- public static class Storage
- {
- public static List<Server.CBuildings> Gebauede { get; set; }
- }
- }
- // im Hauptformular:
- private void frmMain_Load( object sender, EventArgs e )
- {
- Storage.Gebauede = Settings.host.getBuildings();
- }
Für mich stellt sich die Frage, warum es hier nicht funktioniert, aber bei anderen Klassen schon(einziger Unterschied ist,
dass ich dort keine List<> übergebe)
Hat jemand eine Idee ode rein Tipp, wie ich das Problem lösen könnte ?
Gruß
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Annoxoli“ ()