我目前正在研究包含使用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