无法通过WCF中的对象

  • 本文关键字:对象 WCF c# .net wpf wcf
  • 更新时间 :
  • 英文 :


我目前正在研究我的最终项目,其中包含WCF,WPF和C#的使用,并且我很难通过WCF传输对象。一段时间后,我遇到了一个错误,说服务器没有提供有意义的响应。崩溃方法中正在使用的类是:

[DataContract]
    public class Player
    {
        //public static int clientID = 0;
        [DataMember]
        public int Wins { get; set; }
        [DataMember]
        public int Loses { get; set; }
        [DataMember]
        public int realID { get; }
        [DataMember]
        public string nickName { get; set; }

        public Player(int Wins, int Loses, string nickName)
        {
            this.Wins = Wins;
            this.Loses = Loses;
            this.nickName = nickName;
            //clientID++;
            realID = 1; //clientID;
        }
    }
    [DataContract]
    public class Run
    {
       [DataMember]
        public List<Player> Players { get; set; }
        [DataMember]
        public bool isActive { get; set; }
        public Run()
        {
            Players = new List<Player>();
        }
        public void playerJoined(Player player)
        {
            Players.Add(player);
        }
        public void playerLeft(Player player)
        {
            if (Players.Contains(player)) Players.Remove(player);
        }
        public void generateRun()
        {
            //  TODO: get a random map from the DB and pass it to all players

            return;
        }
    }

和崩溃代码的方法是:

    public Run getRunDetails(int runNumber)
    {
        runNumber = runNumber - 1;
        return Runs[runNumber];
    }

客户端的代码为:

ListBoxItem tempItem = ((ListBoxItem)allRuns.SelectedItem);
    if(tempItem != null && !tempItem.Content.Equals("There are no runs available, create one now."))
    {
        string numString = ((string)tempItem.Content);
        numString = numString.Substring(4, numString.Length - 4);
        run = Service.getRunDetails(int.Parse(numString));
    }

在调试一段时间后,我发现问题在 list 变量中,我尝试将其仅更改为 player varible->同样的错误。使我的缓冲区和消息大小更大。代码不会崩溃并发送我的运行对象的唯一方法是 list 不是数据成员。

//[DataMember]
public List<Player> Players { get; set; }

如果我执行以上代码的工作原理,但是我迫切需要传递给客户端的 list 。对不起,我的帖子很长,但我没有很长时间,我需要完成,任何帮助都将不胜感激。(也很抱歉格式不佳,我尽了最大的努力)

我很确定这里的问题是您在玩家中没有无参数构造函数...

尝试添加

public Player() {}

到你的班级...

那是因为您的" realId" [datamember]没有设置器,请参见此链接,以获取有关正确序列化读取成员的提示。WCF:不设置ReadOnly DataMember属性?

另外,如果您已更改了通过WCF渠道传递的类中的"更新WCF"服务上的"更新服务参考"。

最新更新