开发者

Sending a Tuple object over WCF?

开发者 https://www.devze.com 2022-12-28 07:26 出处:网络
Is the System.Tuple class supported by WCF\'s Data Contract Serializer (i.e., can I pass Tuple objects t开发者_开发知识库o WCF calls and/or receive them as part or all of the result)?

Is the System.Tuple class supported by WCF's Data Contract Serializer (i.e., can I pass Tuple objects t开发者_开发知识库o WCF calls and/or receive them as part or all of the result)?

I found this page, but not the clear, definitive "you can send and receive Tuples with WCF" answer I was hoping for.

I'm guessing that you can, as long as all of the types within the Tuple itself are supported by the Data Contract Serializer -- can anyone provide me with a more definitive answer? Thanks.


The Tuple types are marked with SerializableAttribute, therefore, if the types you store within are serializable, they should be able to be serialized by WCF as well.

Check out: links of Tuple'1, Tuple'2, etc. It says:

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

Note that the document you linked contains the following line:

The [Serializable] / ISerializable programming model is not supported in a partial trust environment.

So, it may not be as easy as it would seem.

(BTW, the Tuple static class is also worth checking out.)


I was just digging into this myself, and it seems that one issue might be if you're consuming the WCF service through Silverlight: see Davy Brion's blog for more.

The Silverlight version of Tuple doesn't have the Serializable attribute, which poses an issue at present.


I have Tuples working nicely with .NET 4.0 and WCF (reminder: you need .NET 4.0 for Tuple support).

Here is the unit test method (which calls the method via the WCF layer):

/// <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

Here is the interface:

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

Here is the implementation:

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

I just tested it by debugging using a "WCF Service Application" (see New..Project), which serves the WCF service. I use this method for debugging, as I can use the debugger to step seamlessly from the WCF client into the WCF service , and back again, which is quite useful at times.

I've also just tested this method by deploying it to both a console app, and a service app, so its definitely working for me.

0

精彩评论

暂无评论...
验证码 换一张
取 消