我尝试通过@TCP将图像对象作为序列化文件从客户端发送到服务器 并得到这个异常
服务器代码
namespace Receiver
{
[Serializable()]
public class ImageSerial : ISerializable
{
public Image img = null;
public ImageSerial(SerializationInfo info, StreamingContext ctxt)
{
img = (Image)info.GetValue("OMG", typeof(Image));
}
public void GetObjectData(SerializationInfo info, StreamingContext context)
{
info.AddValue("OMG", img);
}
}
public class ObjSerial
{
private Stream stream;
private BinaryFormatter bformatter;
private string FILENAME = "m.bin";
ImageSerial mp = new ImageSerial();
public Image getImgFromBin()
{
stream = File.Open(FILENAME, FileMode.Open);
bformatter = new BinaryFormatter();
mp = (ImageSerial)bformatter.Deserialize(stream);
stream.Close();
return mp.img;
}
客户端代码
namespace WindowsFormsApplication5
{
[Serializable()]
class ImageSerial :ISerializable
{
public Image img = null;
public ImageSerial() { }
public ImageSerial(SerializationInfo info, StreamingContext ctxt)
{
img = (Image)info.GetValue("OMG", typeof(Image));
}
public void GetObjectData(SerializationInfo info, StreamingContext context)
{
info.AddValue("OMG",img);
}
}
public class ObjSerial
{
private string FILENAME = "m.bin";
private TcpClient tcpClient;
private FileStream fstFile;
private NetworkStream strRemote;
private string SERVERIP = "10.102.239.207";
private int SERVERPort = 5051;
public void start(Image ims)
{
ImageSerial mp = new ImageSerial();
mp.img = ims;
Stream stream = File.Open(FILENAME, FileMode.Create);
BinaryFormatter bformatter = new BinaryFormatter();
bformatter.Serialize(stream, mp);
stream.Close();
//Clear mp for further usage.
sendFile();
}
private void ConnectToServer(string ServerIP, int ServerPort)
{
tcpClient = new TcpClient();
try
{
tcpClient.Connect(ServerIP, ServerPort);
}
catch (Exception exMessage)
{
// Display any possible error
}
}
private void sendFile()
{
ConnectToServer(SERVERIP, SERVERPort);
if (tcpClient.Connected == false)
{
ConnectToServer(SERVERIP, SERVERPort);
}
strRemote = tcpClient.GetStream();
fstFile = new FileStream(FILENAME, FileMode.Open, FileAccess.Read);
int bytesSize = 0;
byte[] downBuffer = new byte[2048];
while ((bytesSize = fstFile.Read(downBuffer, 0, downBuffer.Length)) > 0)
{
strRemote.Write(downBuffer, 0, bytesSize);
}
tcpClient.Close();
strRemote.Close();
fstFile.Close();
}
}
我读过很多关于此异常的主题,它们都讨论了两种解决方案
- 格式化程序.Binder
- AppDomain.CurrentDomain.AssemblyResolve
但还是不行
最佳答案
服务器端当然不会找到客户端程序集。但它不应该。您的客户端代码不得位于服务器端。这里的问题是您定义了 ImageSerial
类两次,一次在服务器中,一次在客户端中。如果你控制双方,那就完全错误了。创建一个由客户端和服务器引用的公共(public)程序集,并将公共(public)类放在那里。
此外,删除从服务器到客户端的所有引用。如果您愿意,应该采用其他方式绑定(bind),或者使用中间服务层,例如 WCF。
关于c# - 异常 : Cannot find the assembly Mynamespace , 版本=0.0.0.0,文化=中性,PublicKeyToken=null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13316557/