1

多次元配列を持つさまざまなオブジェクトは、WCF netTcpBinding 接続を通過する必要があります。WCF は、試行時に「多次元配列はサポートされていません」をスローします。

このクラスのインターフェースを変更することはできません。wcf を通過する前にオブジェクトをバイナリ シリアル化するラッパーを作成します (netTcpBinding がバイナリ転送であると想定されている場合でも)。私は正しいですか?

その転送を行うためのエレガントな一般的なデザインを探しています。その開発を開始する前に (C# dot net 4 で) コミュニティからのアドバイスはありますか?

4

1 に答える 1

1

問題のクラスの代わりに byte[] を受け入れるように WCF サービスのインターフェイスを変更できますか? クラスは引き続き多次元配列を持つことができますが、インスタンスを渡す代わりに、それを byte[] にシリアル化し、それをパラメーターとして渡します。それが@John Willemseの言っていることだと思います。

編集: 100% 肉付けされていないように見えるため、WCF サービス インターフェイスの変更を受け入れることができるように聞こえます。元のコードがなければ、私はいくらか制限されていますが、次の例のようなものがあなたを導くのに役立つはずです:

から変更する:

[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[] を逆シリアル化し、インスタンスを任意のコードに渡すだけです。さらに明確にする必要がある場合はお知らせください。

于 2013-05-06T13:56:38.080 に答える