我目前正在研究包含使用WCF,WPF和C#的最终项目,并且我很难通过wcf传递一个对象。 经过一段时间后,我收到一条错误消息,说服务器没有提供有意义的响应。 是在方法中使用的类,碰撞是:无法在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));
}
经过一段时间的调试,我发现问题是在列表变量,我试图改变它只有一个玩家变量 - >得到相同的错误。同样可以使我的缓冲区和消息大小更大。 代码不会崩溃,并送我运行对象的唯一方法是当列表不是一个数据成员..
//[DataMember]
public List<Player> Players { get; set; }
如果我做了上面的代码工作完美,但我迫切需要的列表传递给客户端。 对不起,但我没有很长时间,我需要它完成,任何帮助将非常感激。 (另外,对不起穷人的格式,我尽力了)
你能生成一个返回你需要的List的方法吗? – jmag
@jmag我想我可以生成一个,但我可以看到随之而来的问题。我更喜欢像上面那样使用。 我会尽量用明天的方法来做到这一点(它的00:00在这里),我会在这里更新。 谢谢! –
我想知道列表是否被认为是Data Contract Serializer支持的类型之一。 https://msdn.microsoft.com/en-us/library/ms731923(v=vs.110).aspx它可能导致错误? –
jmag