具有多维数组的不同对象需要通过 WCF netTcpBinding 连接。WCF 在尝试时抛出“不支持多维数组”。
我不能改变这个类的接口。我将创建一个包装器,在通过 wcf 之前对对象进行二进制序列化(即使 netTcpBinding 应该是二进制传输)。我对吗?
我正在寻找一种优雅的通用设计来进行转移。在我开始开发之前(在 C# dot net 4 中)社区有什么建议吗?
具有多维数组的不同对象需要通过 WCF netTcpBinding 连接。WCF 在尝试时抛出“不支持多维数组”。
我不能改变这个类的接口。我将创建一个包装器,在通过 wcf 之前对对象进行二进制序列化(即使 netTcpBinding 应该是二进制传输)。我对吗?
我正在寻找一种优雅的通用设计来进行转移。在我开始开发之前(在 C# dot net 4 中)社区有什么建议吗?
您可以更改 WCF 服务的接口以接受 byte[] 而不是有问题的类吗?您的类仍然可以具有多维数组,但不是传递实例,而是将其序列化为 byte[] 并将其作为参数传递。我认为这就是@John Willemse 所说的。
编辑:听起来您确实可以接受更改 WCF 服务接口,因为您似乎没有 100% 充实它。如果没有您的原始代码,我会受到一些限制,但是像这个例子这样的东西应该可以帮助指导您:
更改自:
[ServiceContract]
public interface IShipmentManagement
{
[OperationContract]
void Process(Shipment shipment);
}
至:
[ServiceContract]
public interface IShipmentManagement
{
[OperationContract]
void Process(byte[] serializedShipment);
}
然后在调用 WCF 服务的代码中,您需要对“Shipment”实例进行二进制序列化,如下所示:
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);
另一方面,您只需要反序列化 byte[] 并将实例传递给您拥有的任何代码。如果您需要更多说明,请告诉我。