情况:
我有一堆业务对象坐在Web服务后面。所有对象都封装在一个BusObjects.DLL中,它被强名称并位于服务器上的GAC中(因为服务器上的其他应用程序也可以访问它)。
我有一个点击一次的客户端应用程序,它调用所述的Web服务。 click-once应用程序还附带此BusObjects.DLL。
Web服务将数据返回给客户端的方式如下:它将业务对象序列化为字节数组,并将此字节数组返回给客户端。客户端将接收到的字节数组反序列化为业务对象。这是可能的,因为客户端和服务器代码都引用了相同的BusObjects.DLL。一切都很好。
问题在于我。当我在VS2005 IDE中有客户端解决方案(包括BusObjects项目)时,代码无法将字节数组反序列化为业务对象,因为它声称,
“无法加载文件或程序集 “CC.BusObjects, 版本= 2.12.1.47,文化=中立, PublicKeyToken = af56fdb58c626305'或 其中一个依赖项。位于 程序集的清单定义 与程序集引用不匹配。 (来自HRESULT的异常:0x80131040)“
我尝试过匹配版本,但如果将BusObjects项目作为项目引用而不是外部程序集,则似乎没有任何工作。不幸的是,我必须在解决方案中使用BusObjects进行调试。
我该怎么做才能解决这个问题?我听说过版本重定向,但似乎无法使用强大的命名程序集,但也许我做错了。
这是序列化和反序列化代码:
public static byte[] ToBinary(Object objToBinary)
{
MemoryStream memStream = new MemoryStream();
BinaryFormatter formatter = new BinaryFormatter(null,
new StreamingContext(StreamingContextStates.Clone));
formatter.Serialize(memStream, objToBinary);
memStream.Seek(0, SeekOrigin.Begin);
return memStream.ToArray();
}
public static object BinaryTo(byte[] objFromBinary)
{
MemoryStream ms = new MemoryStream(objFromBinary);
BinaryFormatter formatter = new BinaryFormatter();
ms.Position = 0;
object obj = formatter.Deserialize(ms);
return obj;
}
序列化:
[WebMethod]
public byte [] GetContacts()
{
return ToBinary(BusObjects.GetContacts());
}
要反序列化:
byte [] bts = ContactService.GetContacts();
List<Contact> lstContacts = (List<Contact>) BinaryTo(bts);
答案 0 :(得分:2)
几乎可以肯定的是,您将版本号设置为在构建过程中自动递增。这通常导致一个版本号版本的场景可能导致您看到的负载问题。
尝试以下