2012-04-11 10 views
0

Serverseitige Schnittstelle:Über wcf Rest Rückgabeliste

[OperationContract] 
[WebGet(UriTemplate = "GetCardInfoByCardNumber/?cardNumber={cardNumber}&SerialNumber={SerialNumber}&token={token}", ResponseFormat = WebMessageFormat.Json)] 
IList<Cards> GetCardInfoByCardNumber(string cardNumber, string SerialNumber, string token); 

Serverseitige Implementierung:

public IList<Cards> GetCardInfoByCardNumber(string cardNumber, string SerialNumber, string token) 
{ 
    if (BaseClass.HasPermission(token)) 
     return cm.GetCardInfoByCardNumber(cardNumber, SerialNumber); 
    else 
     return null; 
} 

Client-Seite:

class Program 
{ 
    static void Main(string[] args) 
    { 
     TestResWCF(); 
     Console.ReadLine(); 
    } 

    static List<Cards> TestResWCF() 
    { 
     List<Cards> a = null; 
     string ServiceUri = "http://192.168.15.18:8089/GetCardInfoByCardNumber/?cardNumber=HH-120109-017&SerialNumber=&token=123456"; 

     WebClient proxy = new WebClient(); 

     proxy.Encoding = Encoding.UTF8; 

     proxy.DownloadStringCompleted += new DownloadStringCompletedEventHandler 
      (
      (s, e) => 
      { 
       Stream stream = new MemoryStream(Encoding.Unicode.GetBytes(e.Result)); 
       DataContractJsonSerializer obj = new DataContractJsonSerializer(typeof(List<Cards>)); 
       a = obj.ReadObject(stream) as List<Cards>; 
      } 
      ); 

     proxy.DownloadStringAsync(new Uri(ServiceUri)); 

     return a; 
    } 

List<Cards> eine Rückkehr leere Zeichenkette immer! Wie gebe ich Daten zurück? Vielen Dank!

Haben Sie ein Beispiel? Entschuldigung für mein schlechtes Englisch

Antwort

0

Können Sie den Code für die "Karten" und "Card" Klassen teilen?

Ich bin mir sehr sicher, dass es höchstwahrscheinlich nicht mit [DataContract] und [DataMember] richtig eingerichtet ist. Möglicherweise haben Sie den Typ mit [DataContract] dekoriert, aber vergessen, die gewünschten Mitglieder mit [DataMember] zu kommentieren. Oder Sie haben sie vielleicht gar nicht dekoriert und hinter den Kulissen passiert etwas anderes. In 99% der Szenarios ist eine falsche Dekoration oder eine falsche Dekoration oder Fehlinitialisierung des Serialisierers der Grund dafür, dass dieser Fehler auftritt.

Wenn Sie es richtig dekoriert haben, kann es andere Probleme geben. Es ist schwierig, 100% ig aus den von Ihnen bereitgestellten Details zu schließen. Daher würde ich die Ablaufverfolgung aktivieren, um Ablaufverfolgungsprotokolle zu generieren (die Sie dann mit SvcTraceViewer anzeigen/freigeben können) und Debug-Ausnahmen aktivieren (indem Sie die Einstellung includeExceptionDetailInFaults aktivieren)).