0
長話短說,我的應用程序一直使用二進制化來在服務器/客戶端之間發送原始文本和圖形。想要在相同的端口上推送這兩個項目,我試着改變爲使用Soap格式化程序發送一個帶有類型標誌的對象,幷包含稍後將被投射的對象。我嘗試在abject中包裝一個字符串,並使用SoapFormatter序列化和反序列化對象。當我嘗試這樣做時,客戶端在反序列化對象時拋出一個異常:「給定編碼中的字符無效,第1行,第6位」。有什麼想法我做錯了嗎?使用SoapFormatter時無效的XML響應
對象被通過網絡發送:
[Serializable]
public class NetContainer
{
//this object is sent and can contain either Text or an Image file
#region Variables
private Flag flag; //type of object being sent
private object media;
#endregion Variables
#region Constructor
public NetContainer(Flag type, object containedObject)
{
flag = type;
media = containedObject;
}
#endregion Constructor
#region Properties
public Flag Flag
{
get { return flag; }
set { flag = value; }
}
public object Media
{
get { return media; }
set { media = value; }
}
#endregion Properties
}
public enum Flag
{
Imain,
IProfile,
TMain,
ABack
}
發送代碼:
public void SendText(string text)
{
//assemble package
NetContainer package = new NetContainer(Flag.TMain, text);
foreach (TcpClient clientInstance in ClientList)
{
if (clientInstance.Connected) //if connection is active
{
BinaryFormatter formatter = new BinaryFormatter();
//serialize package and send
formatter.Serialize(clientInstance.GetStream(), package);
}
}
}
拋出異常接收的代碼:
private void StartReading()
{
while (connection.Connected == true)
//while (true)
{
using (NetworkStream stream = connection.GetStream()) //use the client's connection stream
{
//BinaryFormatter formatter = new BinaryFormatter();
SoapFormatter formatter = new SoapFormatter();
while (true)
{
//deserialize the package from the network stream
NetContainer package = (NetContainer)formatter.Deserialize(stream);
switch (package.Flag)
{
case Flag.TMain:
rtbMain.Text += (string)package.Media;
break;
case Flag.Imain:
pbxMain.Image = (Image)package.Media;
break;
default:
Console.WriteLine("Unkown Flag error: " + package.Flag);
break;
}
}
}
}
}
你的一切包括* _ *除外_反序列化的樣本消息...... – 2012-03-13 01:34:44
有沒有辦法找到,而信息在VS2010中進行調試還是應該編寫一個單獨的實例來將其序列化爲文件?在測試中,字符串僅僅是「這是一個成功的文本傳輸」,然後用「TMain」標誌打包。 – ChargerIIC 2012-03-13 01:58:33
提琴手是你的朋友。 – 2012-03-13 01:59:31