Entwickler-Ecke

Verteilte Systeme - WCF Listen übergabe


bizkit - Mo 17.02.14 11:54
Titel: WCF Listen übergabe
Hallo,

leider komme ich nicht auf die Idee wie ich folgendes Problem lösen kann.

Wie kann ich machen, dass Webservice Host (WCF) eine Methode hat, die eine LISTE(Arraylist) an deien WCF- Client übergigbt.
Ich habe sonst immer mit Strings und Int als Übergabeparameter geabreitet, aber mit Listen habe ich keine Idee wie ich das machen sollte.
Wäre über jeden Vorschlag dankbar


Moderiert von user profile iconChristian S.: Topic aus Basistechnologien verschoben am Mo 17.02.2014 um 11:02


Christian S. - Mo 17.02.14 12:01

Wo ist denn genau das Problem? So lange die Liste serialisierbar ist und der entsprechende Elementtyp mittels DataContract markiert ist, sollte das so gehen:


C#-Quelltext
1:
2:
3:
4:
5:
[DataContract]
public class Element {
  [DataMember]
  public string Eigenschaft {get; set;}
}



C#-Quelltext
1:
2:
3:
4:
5:
[ServiceContract]
interface IService {
  [OperationContract]
  Element[] GetElements();
}



C#-Quelltext
1:
2:
3:
4:
5:
6:
public class Service : IService {
  public Element[] GetElements()
  {
    // ...
  }
}


bizkit - Mo 17.02.14 13:27

Danke,

ich komme mit den Datacontracts überhaupt nicht klar.

Ich möchste auf der Hostseite eine Liste z.B. mit zwei Werten an den Clinet übergeben.
Aber ich komme nicht weiter, weil ich das mit dem Datacontract nicht so ganz verstehe (habe mir schon die ganzen Tutorials angeschaut).
Kannst du mir evtl. einen kleinen Bsp. machen/zeigen?


Christian S. - Mo 17.02.14 13:53

Oben steht doch ein Beispiel. Was konkret funktioniert denn nicht bzw. was verstehst Du nicht? Hast Du Code, der nicht funktioniert, den man sich mal angucken kann?


bizkit - Mo 17.02.14 13:59


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
[ServiceContract]
    public interface IService1
    {
      
       [OperationContract]
       GUID1[] getGUID();
     }



[DataContract]
    public class GUID1
    {
        private string guid;
      
        [DataMember]
        public string guidId
        {
            set { this.guid = value; }
            get { return this.guid; }

        }

    }


DIE Methode in Service1.cs

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
    public GUID1[] getGUID()
        {        
      GUID1[] guid = new GUID1[2];

      guid[0] = "Test";

    
        }


ab da komme ich nicht mehr weiter.

Moderiert von user profile iconChristian S.: C#-Tags hinzugefügt


Christian S. - Mo 17.02.14 14:07

Damit bist Du doch praktisch fertig :nixweiss:
Die Methode muss den Wert natürlich auch noch zurück liefern, aber sonst sehe ich kein Problem.


bizkit - Mo 17.02.14 15:12

ja,
aber wie übergebe ich dem client die werte aus der liste?


Ralf Jansen - Mo 17.02.14 15:16

In dem der Client getGUID() aufruft. Genauso wie bei den Methoden die einen String und/oder int zurückgeben von denen du sagst das hättest du hinbekommen.


bizkit - Mo 17.02.14 15:36

bei mir kommt eine Fehlermeldung, wenn ich in dem Cleint es abfrage.

C#-Quelltext
1:
2:
3:
Service1Client client = new Service1Client();

client.getGUID();

dann kommt die folgende Fehlermeldung:
Der Server konnte die Anforderung aufgrund eines internen Fehlers nicht verarbeiten. Wenn Sie weitere Informationen zum Fehler erhalten möchten, aktivieren Sie entweder IncludeExceptionDetailInFaults (über das ServiceBehaviorAttribute oder das <serviceDebug>-Konfigurationsverhalten) für den Client, um die Ausnahmeinformationen zurück an den Server zu senden, oder aktivieren Sie die Ablaufverfolgung gemäß der Microsoft .NET

Moderiert von user profile iconTh69: C#-Tags hinzugefügt


Christian S. - Mo 17.02.14 16:46

Dann tu doch, was in der Fehlermeldung steht, um mehr darüber zu erfahren, was da passiert. Einfach in der .config-Datei des Service die IncludeExceptionDetailInFaults-Eigenschaft auf true setzen (oder On, weiß ich nicht mehr ...), dann wird die Exception aus dem Service an den Client gesendet.