2012-04-11 88 views
0

服務器側接口:有關WCF休息返回列表

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

服務器端執行:

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

客戶端:

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>返回空字符串永遠!如何返回數據?非常感謝你!

你有什麼例子嗎?對不起我的英文不好

回答

0

你能分享「卡」和「卡」類的代碼嗎?

我很肯定很可能它沒有正確裝飾[DataContract]和[DataMember]。您可能已使用[DataContract]裝飾了該類型,但忘記用[DataMember]註釋所需的成員。或者,你可能根本沒有裝飾它們,而幕後發生了其他事情。在99%的情況下,串行器的錯誤裝飾或不正確的裝飾或錯誤初始化是發生此錯誤的原因。

如果您確實修飾了它,可能還有其他一些問題。從您提供的詳細信息中很難確定100%,因此我會啓用跟蹤來生成跟蹤日誌(您可以使用SvcTraceViewer查看/共享)並打開調試異常(通過打開includeExceptionDetailInFaults設置)。