关于wcf休息返回列表

时间:2012-04-11 12:47:56

标签: 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>总是返回空字符串!如何返回数据?非常感谢你!

你有什么例子吗?抱歉我的英文不好

1 个答案:

答案 0 :(得分:0)

您可以分享“卡片”和“卡片”类的代码吗?

我非常肯定,它很可能没有正确装饰[DataContract]和[DataMember]。您可能已使用[DataContract]修饰了类型,但忘记使用[DataMember]注释所需的成员。或者,您可能根本没有装饰它们,而在幕后也会发生其他事情。在99%的情况下,错误装饰或不正确的装饰或错误初始化是发生此错误的原因。

如果你确实正确地装饰它,可能还有其他一些问题。仅仅通过您提供的详细信息很难100%确定,因此我将启用跟踪以生成跟踪日志(然后您可以使用SvcTraceViewer查看/共享)并打开调试异常(通过启用includeExceptionDetailInFaults设置) )。