0

服务器端接口:

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

你有什么例子吗?对不起,我的英语不好

4

1 回答 1

0

你能分享“卡片”和“卡片”类的代码吗?

我很确定它很可能没有正确地用 [DataContract] 和 [DataMember] 装饰。您可能已经使用 [DataContract] 修饰了类型,但忘记使用 [DataMember] 注释您想要的成员。或者,您可能根本没有装饰它们,而幕后正在发生其他事情。在 99% 的场景中,错误修饰或不正确的修饰或序列化程序的错误初始化是发生此错误的原因。

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

于 2012-04-26T20:01:28.237 回答