2013-05-06 52 views
0

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

我不能改变这个类的接口。我将创建一个包装器,它会在通过wcf之前对对象进行二进制序列化(即使netTcpBinding应该是二进制传输)。我对吗?

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

+0

二进制序列化为一个字节流(单维字节数组),并在另一端反序列化。 – 2013-05-06 13:48:26

+0

我预计可能会强制WCF是完整的二进制文件(不是二进制文件+ soap文件)。我没有找到如何做到这一点。有人对此有所了解? – Frederic 2013-05-06 13:50:32

回答

1

您可以更改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 []并将实例传递给你拥有的任何代码。让我知道你是否需要更多的澄清。

+0

是的我想要二进制传输它,如果它不可能强制wcf完全二进制内部。如果您有任何想法,我正在为此wcf界面寻找优雅的设计。 – Frederic 2013-05-06 14:00:07

+0

你现在的设计是什么样的? – BlakeH 2013-05-06 14:14:46

+0

我正在寻找来自社区的任何建议,然后开始开发。 – Frederic 2013-05-06 15:01:13