Frage : WCF nistete komplizierte Arten

Hallo, haben

I ein Problem, eine Kategorie über WCF herauszustellen, wenn es einen anderen Gegenstand bezieht, den ich „hinunter den Draht“ außerdem senden möchte.
To bilden es einfacher, ist hier eine vereinfachte Struktur, die das Problem zeigt:

There sind 3 Kategorien: Aufzeichnung (eine niedrige Kategorie), OnsiteAppointment und Kunde (beide übernehmen von der Aufzeichnung).

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:
6:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
   _
    Allgemeine Kategorie OnsiteAppointment
        Übernimmt Aufzeichnung

        Privates _startDate als Datum/Uhrzeit
         _
        Staatseigentum StartDate () als Datum/Uhrzeit
            Erhalten
                _startDate zurückbringen
            Ende erhalten
            Einstellen (ByVal Wert als Datum/Uhrzeit)
                _startDate = Wert
            Enden-Satz
        Enden-Eigentum

Privates _customer als Kunde
         _
        Staatseigentum-Kunde () als Kunde
            Erhalten
                _customer zurückbringen
            Ende erhalten
            Einstellen (ByVal Wert als Kunde)
                _customer = Wert
            Enden-Satz
        Enden-Eigentum

Enden-Kategorie

  _
    Allgemeiner Kategorien-Kunde
        Übernimmt Aufzeichnung

        Privates _firstName als Schnur
         _
        Staatseigentum FirstName () als Schnur
            Erhalten
                _firstName zurückbringen
            Ende erhalten
            Einstellen (ByVal Wert als Schnur)
                _firstName = Wert
            Enden-Satz
        Enden-Eigentum
Enden-Kategorie

 _
Allgemeine Kategorien-Aufzeichnung

Ende Class


I Versuch, zum von OnsiteAppointment über WCF herauszustellen mögen dieses:

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
Allgemeine Funktion GetAppointments (ByVal startDate als Datum/Uhrzeit, ByVal endDate als Datum/Uhrzeit) als Listen-(von OnsiteAppointment) Werkzeuge IOnsiteScheduler.GetAppointments

            Versuch

                Schwache Verabredungen als neue Liste (von OnsiteAppointment)
…
                    Schwache Verabredung als neues OnsiteAppointment
                    appointment.ID = Leser („appointmentId“)
                    appointment.StartDate = reader.SafeDate („startDate“)
                    .                    
                    Schwacher Kunde als neuer Kunde
                    customer.FirstName = reader.SafeString („firstName“)

                   Verabredung. Kunde = Kunde
                   Verabredungen. Hinzufügen (Verabredung)
                   Verabredungen zurückbringen
Function


This Arbeiten FEIN beenden, solange „Kunde“ nicht „von der Aufzeichnung“ übernimmt. Sobald ich „Kunde“ übernehmen lasse von „Aufzeichnung“, wird die folgende HTTP-Störung empfangen (Klient ist Silverlight, ich erhielt diese HTTP-Störung, indem er den HTTP-Verkehr using APP „Fiddler2“) schnüffelt:

HTTP/1.1 504 Fiedler - Failure
Content-Type empfangen: Text/html
Connection: close
Timestamp: 02:37: 54.822

ReadResponse () fiel aus: Der Bediener brachte nicht eine Antwort für diesen Antrag zurück.                    

… und selbstverständlich Klientenausfallen, das diese message.

My Frage empfangen wird, ist: Was sind ich falsch hier tuend?
Obviously „Aufzeichnung“ hat kein Problem, das herausgestellt wird, da OnsiteAppointment gut herausgestellt erhält. Es gibt kein Problem, welches die genistete Art herausstellt (OnsiteAppointment.Customer) außerdem. So warum würde es sich interessieren, wenn Kunde von einer Art übernimmt, die gut als niedrige Kategorie für die andere Kategorie funktioniert?

Are dort irgendwelche Arten Beschränkungen auf dem Niveau der Verschachtelung/des Beziehens anderer Arten, wenn Gegenstände zurückgebracht werden? Ich möchte normale leere Ansammlungen gerade herunterladen und „sie herauf“ auf dem Klienten dann binden nehmen - ich würde es vorziehen, die Gegenstandstruktur herunterzuladen, gerade da ich sie in der Geschäftsschicht…

Any Hilfe würde sein groß habe!
Thanks

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

Antwort : WCF nistete komplizierte Arten

Hallo,

In WCF können Sie eine Vorkategorie nicht für eine niedrige Kategorie direkt ersetzen, wie Sie in C# können.

Sie können ein Attribut verwenden, um in der Lage zu sein, die Kategorie zu führen dem Klienten. Dieses getan auf der Service-Schnittstelle

KnownType - erlaubt, dass die Kategorie während aller Verträge und Betriebe using die niedrige Kategorie überschritten.
Dieses ist appliedto das DataContract.
C#: [KnownType (typeof (Kunde))]

ServiceKnownType - erlaubt, dass die Kategorie nur für den Betrieb überschritten, auf dem er definiert.
Dieses gegolten für den Service-Vertrag.

Persönlich ich verwende ServiceKnownType
C#: [ServiceKnownType (typeof (Kunde))]
VB.NET: ustomer))> _

Einen Blick hier haben
http://msdn.microsoft.com/en-us/library/system.servicemodel.serviceknowntypeattribute.aspx

Hoffen, dass dieses hilft,

Darren
Weitere Lösungen  
 
programming4us programming4us