无法在wcf

时间:2017-03-07 21:08:18

标签: 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));
    }

经过一段时间的调试后,我发现问题出现在列表变量中,我试图将其更改为播放器变量 - &gt;得到同样的错误。同样可以使我的缓冲区和消息大小更大。 代码不会崩溃并发送运行对象的唯一方法是列表不是数据成员时..

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

如果我执行上述操作,代码可以正常运行,但我迫切需要将 List 传递给客户端。 很抱歉很长的帖子,但我没有很长时间,我需要它完成,任何帮助将非常感激。 (另外,抱歉格式不佳,我尽我所能)

1 个答案:

答案 0 :(得分:0)

我很确定这里的问题是你的播放器中没有无参数构造函数......

尝试添加

PropTypes

到你的班级......

要么是因为你的&#39; realId&#39; [DataMember]没有setter,请参阅此链接以获取有关正确序列化readonly成员的提示。 WCF: Exposing readonly DataMember properties without set?

另外,不要忘记更新服务参考&#39;如果您已更改通过WCF通道传递的类中的成员,则在Visual Studio客户端项目中的WCF服务上。