具有多维数组的不同对象需要通过WCF netTcpBinding连接。 WCF在尝试时抛出“不支持多维数组”。WCF:不支持多维数组
我不能改变这个类的接口。我将创建一个包装器,它会在通过wcf之前对对象进行二进制序列化(即使netTcpBinding应该是二进制传输)。我对吗?
我正在寻找一个优雅的通用设计来做转移。在我启动该开发之前来自社区的任何建议(在C#dot net 4中)?
具有多维数组的不同对象需要通过WCF netTcpBinding连接。 WCF在尝试时抛出“不支持多维数组”。WCF:不支持多维数组
我不能改变这个类的接口。我将创建一个包装器,它会在通过wcf之前对对象进行二进制序列化(即使netTcpBinding应该是二进制传输)。我对吗?
我正在寻找一个优雅的通用设计来做转移。在我启动该开发之前来自社区的任何建议(在C#dot net 4中)?
您可以更改WCF服务的接口来接受byte []而不是有问题的类吗?您的类仍然可以具有多维数组,但是不是传递一个实例,而是将其序列化为一个byte []并将其作为参数传递。我认为这就是@约翰威廉姆斯所说的。
编辑:它听起来像你可以接受改变WCF服务接口,因为它看起来你没有它100%充实。没有你的原代码,我比较有限的,但像这样的例子应该有助于引导您:
变化来自:
[ServiceContract]
public interface IShipmentManagement
{
[OperationContract]
void Process(Shipment shipment);
}
到:
[ServiceContract]
public interface IShipmentManagement
{
[OperationContract]
void Process(byte[] serializedShipment);
}
然后在你的代码调用WCF服务你需要二进制序列化“装运”实例如下:
var shipmentManagement = // however you get a reference to your WCF service
var shipment = new Shipment();
// populate your array or whatever
IFormatter formatter = new BinaryFormatter();
var ms = new MemoryStream();
formatter.Serialize(stream, shipment);
var serializedShipment = ms.ToArray();
shipmentManagement.Process(serializedShipment);
On另一方面,你只需要反序列化byte []并将实例传递给你拥有的任何代码。让我知道你是否需要更多的澄清。
二进制序列化为一个字节流(单维字节数组),并在另一端反序列化。 – 2013-05-06 13:48:26
我预计可能会强制WCF是完整的二进制文件(不是二进制文件+ soap文件)。我没有找到如何做到这一点。有人对此有所了解? – Frederic 2013-05-06 13:50:32