حسام فيصل

مشكلة في إرسال غرض Object عبر الشبكة

5 ردود في هذا الموضوع

السلام عليكم :

مشكلتي هي في إرسال غرض عبر الشبكة هذا الغرض مشتق من الكلاس التالي :

[Serializable]
public class messageClass :ISerializable
{
public String reg;
public String message;
//public IPEndPoint clientIp;
public messageClass()
{
reg = "";
}
internal messageClass(SerializationInfo si, StreamingContext context)
{
message = si.GetString("message");
reg = si.GetString("reg");
}
public void GetObjectData(SerializationInfo si, StreamingContext context)
{
si.AddValue("message", message);
si.AddValue("reg", reg);
Type t = this.GetType();
si.AddValue("TypeObj", t);

}
}

عملية الإرسال من client تتم بشكل صحيح و لا غبار عليه :

private void button1_Click(object sender, EventArgs e)
{
TcpClient socket = new TcpClient();
messageClass msg = new messageClass();
msg.reg = "yes";
socket.Connect(ipTXT.Text, 1313);
NetworkStream netStream = socket.GetStream();
IFormatter form = new SoapFormatter();
form.Serialize(netStream, msg);
netStream.Close();
}

الاستقبال من السيرفر :

 public void recieveData()
{
TcpListener listner = new TcpListener(1313);

NetworkStream netStream;
SoapFormatter readFormat = new SoapFormatter();
listner.Start();
while (true)
{
IPEndPoint ip = new IPEndPoint(IPAddress.Any, 0);
Socket clientsocket = listner.AcceptSocket();
netStream = new NetworkStream(clientsocket);
IFormatter objformatter = new SoapFormatter();
if (netStream.CanRead)
{
messageClass clinetmsg = (messageClass)objformatter.Deserialize(netStream);
if (clinetmsg.reg == "yes")
{
MessageBox.Show("welcome to our chat");
}
}


}
}

المشكلة : حدوث Exception :

Parse Error, no assembly associated with Xml key a1:http://schemas.microsoft.com/clr/nsassem/client/client%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3Dnull messageClass

عند السطر:

  messageClass clinetmsg = (messageClass)objformatter.Deserialize(netStream);

فهل من إقتراح أو حل ؟؟؟

مع العلم أنني حاولت ب BinaryFormatter و يحدث Exception عند نفس السطر .....

و عذراً على الإطالة

تم تعديل بواسطه حسام فيصل
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

وعليك السلام اخي حسام ,

تحدث عادة هذه المشكلة في حالة قمت بتغيير اسم النيم سبيس أو الـassembly name للكلاس عند عمل deserialize للـObject , وفي هذه الحالة لديك حلين:

1- الأول استخدم نفس اسم المشروع والنيم سبيس في كلا الطرفين حيث تنشيء المشروع الأول ثم تقوم بعمل Copy للمشروع الأول وتغير فقط في الكود دون تغيير اسم النبم سبيس أو الـassembly Name .

2- استخدام الـSerializationBinder بحيث تقوم بعمل Binding للـClass Type واسناده إلى الـBinder Proparity والموجودة ضمن الـSoapFormatter و الـBinaryFormatter , وعند عمل الـDeserialize نسند الـBinding Object السابق ايضا للـBinary أو الـSoapFormatter Object.

لمزيد من المعلومات حول الـSerializationBinder أنظر المثال التالي:

http://www.codeproject.com/soap/Serialization_Samples.asp

موفق إن شاء الله

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

شكراً أخي فادي و فعلاً لك كل الشكر على هذه المعرفة الواسعة ....

و لكن ما استغربه أن كل الكتب التي أقرأها حالياً حول برمجة الشبكات لم تذكر هذه الملاحظة حول تطابق Assemply و منها كتاب Digital و حتى منهاج C#.net من MCSD ...

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

اهلا بيك اخي حسام ,

في العادة يكون هنالك جزء خاص بالـTroubleshooting في اغلب الكتب تذكر فيه الـExceptions المتوقعة عند التنفيذ لكن بالفعل لم تتحدث أي من كتب برمجة الشبكات حول هذا الـException بالذات ;)

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
في العادة يكون هنالك جزء خاص بالـTroubleshooting في اغلب الكتب تذكر فيه الـExceptions المتوقعة عند التنفيذ لكن بالفعل لم تتحدث أي من كتب برمجة الشبكات حول هذا الـException بالذات

لذلك لا نستطيع أن نستغني عن الخبراء من أمثالك أخي فادي ..

وفقك الله ...

تم تعديل بواسطه حسام فيصل
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
زوار
This topic is now closed to further replies.

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .