15

クラスはSystem.TupleWCF のデータ コントラクト シリアライザーでサポートされていますか (つまり、Tupleオブジェクトを WCF 呼び出しに渡したり、結果の一部またはすべてとして受け取ったりできますか)。

私はこのページを見つけましたが、私が望んでいた明確で決定的な「WCFでタプルを送受信できます」という答えではありませんでした。

それ自体のすべてのタイプデータ コントラクト シリアライザーによってサポートされている限り、できると思いますTuple。より明確な答えを教えてくれる人はいますか? ありがとう。

4

3 に答える 3

16

Tuple型は でマークされているためSerializableAttribute、格納する型がシリアル化可能な場合は、WCF でもシリアル化できるはずです。

チェックアウト: Tuple'1Tuple'2などのリンク。

[SerializableAttribute]
public class Tuple<T1> : IStructuralEquatable, IStructuralComparable, IComparable, ITuple

リンクしたドキュメントには次の行が含まれていることに注意してください。

[Serializable] / ISerializable プログラミング モデルは、部分信頼環境ではサポートされていません。

そのため、見た目ほど簡単ではないかもしれません。

(ところで、Tuple 静的クラスもチェックする価値があります。)

于 2010-04-28T20:37:07.227 に答える
9

私はこれを自分で掘り下げていたところですが、Silverlight を介して WCF サービスを使用している場合に 1 つの問題があるようです。詳細については、Davy Brion のブログを参照してください。

Tuple の Silverlight バージョンには、現時点で問題となっている Serializable 属性がありません。

于 2010-08-17T15:02:02.997 に答える
5

Tuples は .NET 4.0 と WCF でうまく動作しています (注意: Tuple をサポートするには .NET 4.0 が必要です)。

単体テスト メソッドは次のとおりです (WCF レイヤーを介してメソッドを呼び出します)。

/// <summary>
/// Test Tuples
/// </summary>
[TestMethod()]
public void WcfTestTupleUnit()
{
  Tuple<double, double> x;
  x=CallViaWCF.testTuple();
  Assert.AreEqual(x.Item1, 42);
  Assert.AreEqual(x.Item2, 43);
}
#endregion

インターフェースは次のとおりです。

[OperationContract]
Tuple<double, double> testTuple();

実装は次のとおりです。

public Tuple<double, double> testTuple()
{
  return new Tuple<double, double>(42, 43);
}

WCFサービスを提供する「WCFサービスアプリケーション」(New..Projectを参照)を使用してデバッグすることでテストしました。デバッガーを使用して WCF クライアントから WCF サービスにシームレスにステップインし、再び戻ることができるため、この方法をデバッグに使用します。これは非常に便利な場合があります。

また、この方法をコンソール アプリとサービス アプリの両方にデプロイしてテストしたところなので、間違いなく機能します。

于 2010-11-05T13:49:34.710 に答える