0
私のアプリケーションはバイナリのserilizationを使用してサーバー/クライアント間で生テキストとグラフィックを送信していました。同じポート上で両方の項目をプッシュしたいと思ったが、型のフラグを持つオブジェクトを送信するために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;
}
}
}
}
}
を... –
は、その情報の中を検索する方法はありますVS2010でデバッグするか、ファイルにシリアル化するために別のインスタンスを作成する必要がありますか?テストでは、文字列は単に "これは成功したテキスト伝送"で、次にフラグ 'TMain'でパッケージ化されました。 – ChargerIIC
Fiddlerはあなたの友人です。 –