C# WCF:不支持多维数组

C# WCF:不支持多维数组,c#,.net,wcf,serialization,C#,.net,Wcf,Serialization,具有多维数组的不同对象需要通过WCF netTcpBinding连接。尝试时WCF抛出“不支持多维数组” 我无法更改此类的接口。我将创建一个包装器,它将在通过wcf之前对对象进行二进制序列化(即使netTcpBinding应该是二进制传输)。我说得对吗 我正在寻找一种优雅的通用设计来完成这种转换。在我开始开发之前,社区有什么建议吗(在C#dot net 4中)?您能否更改WCF服务的接口以接受byte[]而不是所讨论的类?您的类仍然可以具有多维数组,但是不要传递实例,而是将其序列化为byte[]

具有多维数组的不同对象需要通过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);
}
致:

然后在调用WCF服务的代码中,需要对“Shipping”实例进行二进制序列化,如下所示:

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);

另一方面,您只需要反序列化字节[],并将实例传递给所有代码。如果您需要更多说明,请告诉我。

您可以更改WCF服务的接口以接受byte[]而不是所讨论的类吗?您的类仍然可以具有多维数组,但是不要传递实例,而是将其序列化为byte[]并将其作为参数传递。我想这就是@John Willemse所说的

编辑:听起来您可以接受更改WCF服务接口,因为您似乎没有对其进行100%的充实。如果没有您的原始代码,我会受到一些限制,但类似于此示例的内容应该可以帮助您:

更改为:

[ServiceContract]
public interface IShipmentManagement
{
    [OperationContract]
    void Process(Shipment shipment);
}
致:

然后在调用WCF服务的代码中,需要对“Shipping”实例进行二进制序列化,如下所示:

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);

另一方面,您只需要反序列化字节[],并将实例传递给所有代码。如果需要更多说明,请告诉我。

二进制将其序列化为字节流(一维字节数组),并在另一端反序列化。我希望可以强制WCF为完全二进制(而不是二进制+soap)。我不知道该怎么做。有人对此有所了解?二进制将其序列化为字节流(一维字节数组),并在另一端进行反序列化。我希望有可能强制WCF为完全二进制(而不是二进制+soap)。我不知道该怎么做。有人知道吗?是的,如果不可能在内部强制wcf使用完整的二进制文件,我想将其二进制传输。如果你有什么想法的话,我正在为这个wcf接口寻找优雅的设计。你当前的设计是什么样子的?在我开始开发之前,我正在寻找社区的任何建议。是的,如果不可能在内部强制使用完全二进制的wcf,我想将其二进制传输。如果你有什么想法的话,我正在为这个wcf界面寻找优雅的设计。你目前的设计是什么样子的?在我开始开发之前,我正在寻找社区的任何建议。