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

「Cards」および「Card」クラスのコードを共有できますか?

[DataContract] と [DataMember] で適切に装飾されていない可能性が高いと確信しています。[DataContract] で型を装飾している可能性がありますが、必要なメンバーに [DataMember] で注釈を付けるのを忘れています。あるいは、それらをまったく装飾していない可能性があり、舞台裏で何か他のことが起こっています. シナリオの 99% では、シリアライザーの誤った装飾、不適切な装飾、または誤った初期化が、このエラーが発生する理由です。

きちんと装飾した場合は、他の問題が発生する可能性があります。提供された詳細だけでは 100% 確実に判断するのは難しいため、トレースを有効にしてトレース ログを生成し (SvcTraceViewer で表示/共有できます)、デバッグ例外をオンにします (includeExceptionDetailInFaults 設定をオンにすることにより)。 )。

于 2012-04-26T20:01:28.237 に答える