Pytanie : WCF Gniazdować powikłany typ

Cześć,

I mieć problem klasa przez WCF, gdy ono odnosić się inny przedmiot, che I polubić "puszek the drut" także.
To robić ono łatwy, tutaj być uproszczony struktura który pokazywać the problem:

There być 3 klasa: Rejestr (podstawowy klasa), OnsiteAppointment i Klient (rejestr dziedziczyć od Rejestr).

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
   _
    Społeczeństwo Klasowy OnsiteAppointment
        Dziedziczyć Rejestr

        Intymny _startDate DateTime
         _
        Własność Publiczna StartDate () DateTime
            Dostawać
                Wracać _startDate
            Końcówka Dostawać
            Set (ByVal wartość DateTime)
                _startDate = wartość
            Końcówka Set
        Końcówka Własność

Intymny _customer Jako Klient
         _
        Własność Publiczna Klient () Jako Klient
            Dostawać
                Wracać _customer
            Końcówka Dostawać
            Set (ByVal wartość Jako Klient)
                _customer = wartość
            Końcówka Set
        Końcówka Własność

Końcówka Klasa

  _
    Społeczeństwo Klasowy Klient
        Dziedziczyć Rejestr

        Intymny _firstName Sznurek
         _
        Własność Publiczna FirstName () Sznurek
            Dostawać
                Wracać _firstName
            Końcówka Dostawać
            Set (ByVal wartość Sznurek)
                _firstName = wartość
            Końcówka Set
        Końcówka Własność
Końcówka Klasa

 _
Społeczeństwo Klasa Rejestr

Końcówka Class


I próba OnsiteAppointment przez WCF lubić to:

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
Jawny Funkcja GetAppointments (ByVal startDate DateTime, ByVal endDate DateTime) Lista (OnsiteAppointment) Narzędzie IOnsiteScheduler.GetAppointments

            Próba

                Ciemnawy spotkanie Nowy Lista (OnsiteAppointment)
…
                    Ciemnawy spotkanie Jako Nowy OnsiteAppointment
                    appointment.ID = czytelnik ("appointmentId")
                    appointment.StartDate = reader.SafeDate ("startDate")
                    .                    
                    Ciemnawy klient Jako Nowy Klient
                    customer.FirstName = reader.SafeString ("firstName")

                   spotkanie. Klient = klient
                   spotkanie. Dodawać (spotkanie)
                   wracać spotkanie
Kończyć Function


This werk ŚWIETNIE dopóki "Klient" dziedziczyć od "Rejestr". Jak Tylko I robić "Klient" od "Rejestr", the następujący HTTP błąd otrzymywać (klient być Silverlight, I dostać ten HTTP błąd the HTTP ruch drogowy using "Fiddler2" app):

HTTP/1.1 504 Skrzypacz - Otrzymywać Failure
Content-Type: tekst/html
Connection: close
Timestamp: 02:37: 54.822

ReadResponse () nie udać się: The serwer wracać odpowiedź dla ten prośba.                    

… I oczywiście the klient fails ten message.

My pytanie być: Co być I źle tutaj?
Obviously "Rejestr" mieć żadny problem, ponieważ OnsiteAppointment dostawać wystawiać dobrze. Tam  być żadny problem the gniazdować typ (OnsiteAppointment.Customer) także. W Ten Sposób Dlaczego ono dbać jeżeli Klient dziedziczyć od typ che pracować dobrze jako podstawowy klasa dla the inny klasa?

Are tam  jakaś typ ograniczenie na the poziom/inny typ gdy wracać przedmiot? I polubić od właśnie równina pusty kolekcja i wtedy "w górę" na the klient - I woleć the przedmiot struktura właśnie gdy I mieć ono w the biznesowy warstwa…

Any pomoc być wielki!
Thanks

Environment: .NET 4.0, VS 2010, IIS 7, Win7 64bit

Odpowiedź : WCF Gniazdować powikłany typ

Cześć,

W WCF ty móc sub klasa dla podstawowy klasa bezpośrednio gdy ty móc w C#.

Ty móc atrybut sprawnie the klasa the klient. Interfejs zrobić na the Usługowy Interfejs

KnownType - Pozwolić the klasa przechodzić przez cały wszystkie kontrakt i operacja using the podstawowy klasa.
DataContract być appliedto the DataContract.
C#: [KnownType (typeof (Klient))]

ServiceKnownType - Pozwolić the klasa przechodzić tylko dla the operacja na che ono definiować.
Kontrakt stosować the Usługowy Kontrakt.

Osobiście I używać ServiceKnownType
C#: [ServiceKnownType (typeof (Klient))]
VB.NET: ustomer))> _

Mieć spojrzenie tutaj
http://msdn.microsoft.com/en-us/library/system.servicemodel.serviceknowntypeattribute.aspx

Mieć Nadzieję to pomagać,

Darren
Inne rozwiązania  
 
programming4us programming4us