WCF:不支持多维数组

时间:2013-05-06 13:45:39

标签: c# .net wcf serialization

具有多维数组的不同对象需要通过WCF netTcpBinding连接。尝试时,WCF会抛出“不支持多维数组”。

我无法更改此类的界面。我将创建一个包装器,它将在通过wcf之前对对象进行二进制序列化(即使netTcpBinding应该是二进制传输)。我是对的吗?

我正在寻找一种优雅的通用设计来进行转移。在我开始开发之前来自社区的任何建议(在C#dot net 4中)?

1 个答案:

答案 0 :(得分:1)

您是否可以更改WCF服务的接口以接受字节[]而不是相关的类?您的类仍然可以具有多维数组,但不是传递实例,而是将其序列化为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 []并将实例传递给您拥有的任何代码。如果您需要更多说明,请告诉我。