2010-04-28 27 views
13

WCF Veri Sonuç seri hale tarafından desteklenen System.Tuple sınıfı (diğer bir deyişle, WCF için Tuple nesne geçebilir aramaları ve/veya kısmen ya da sonuç tüm olarak almak) var mı?WCF üzerinden bir Tuple nesnesi mi gönderiliyor?

this page'u buldum, ama net, kesin değil "WCF ile Tuples gönderebilir ve alabilirsiniz" cevabını umuyordum. Herkes bir daha kesin bir cevap bana sağlayabilir -

Ben sürece türleriTuple kendi içinde tüm Veri Sözleşme Serializer tarafından desteklenen olarak şunları yapabilirsiniz olduğunu tahmin ediyorum? Teşekkürler.

+0

Tuple, tuple içindeki türler özel türler değil, temel türler olduğu sürece WCF'de iyi çalışmalıdır. İstemci bir kayıt düzeni olmayacaktır çünkü böylece, o zaman istemci üzerinde bir döngüsel bağımlılığı neden olur, bu tuplet olacak.Şimdi bununla ilgili sorunlar yaşıyorum. Web hizmetleri genel bir kötü bir fikir gibi görünüyor. – irperez

cevap

14

Tuple türleri SerializableAttribute ile işaretlenmiştir, bu nedenle, içinde depoladığınız türler serileştirilebilirse, bunlar WCF tarafından da seri hale getirilebilmelidir.

atın: Tuple'1 ait linkler, Tuple'2, vb diyor:

[Serializable]/ıserializable programlama modeli: Bağlantılı belge aşağıdaki satırı içerdiğini

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

Not kısmi bir güven ortamında desteklenmez.

Yani, öyle görünüyor kadar kolay olmayabilir.

9

Sadece bu kendimi kazma edildi (. BTW, Tuple static class da incelenmeye değer) ve Silverlight ile WCF hizmeti kullanmaya eğer bir sorun olabilir gibi görünüyor: için Davy Brion's blog bakınız Daha.

Tuple Silverlight versiyonu şu anda bir sorun teşkil Serializable özniteliği, yok.

5

Tuples, .NET 4.0 ve WCF ile güzel bir şekilde çalışıyorum (hatırlatıcı: Tuple desteği için .NET 4.0'a ihtiyacınız var). Uygulama Burada

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

edilir:

public Tuple<double, double> testTuple() 
{ 
    return new Tuple<double, double>(42, 43); 
} 
Burada
/// <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 

arabirimidir: Burada

(WCF tabakası yoluyla yöntemini çağırdığında) birim test yöntemidir

sadece th hizmet veren bir "WCF Servis uygulaması" (bkz New..Project) kullanarak hata ayıklama bunu test e WCF servisi. Birkaç kez oldukça yararlı olan, tekrar tekrar WCF hizmete WCF istemcisi sorunsuz aşama, ve hata ayıklayıcı kullanabilir gibi, ayıklama için bu yöntemi kullanır.

Ayrıca bu yöntemi, hem bir konsol uygulamasına hem de bir hizmet uygulamasına dağıtarak test ettim, bu yüzden kesinlikle benim için çalışıyor.

+0

Çağıran uygulama için .Net 4.71 kullanarak ve WCF ve diğer classlibraries için .Net 4.61 kullanarak çalışan bir WCF servisinde çalıştı. Bu errormessage var: NameOfServiceReference.TupleofBooleanint türünü System.Tuple 'a dönüştüremiyor. Tuple yerine ValueTuple sınıfını denediğimde aynı hata mesajı. – JRB