Vraag : WCF nestelde complexe types

Hallo, heeft

I een probleem die een klasse via WCF blootstellen, wanneer het een ander voorwerp van verwijzingen voorziet, dat ik „onderaan de draad“ zou willen eveneens verzenden.
To maakt het gemakkelijker, is hier een vereenvoudigde structuur die het probleem toont:

There is 3 klassen: Verslag (een basisklasse), OnsiteAppointment en Klant (allebei erven van Verslag).

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:
   _
    Openbare Klasse OnsiteAppointment
        Erft Verslag

        Privé _startDate als DateTime
         _
        Openbaar Bezit StartDate () als DateTime
            Krijg
                Keer _startDate terug
            Het eind krijgt
            Reeks (waarde ByVal als DateTime)
                _startDate = waarde
            De Reeks van het eind
        Het Bezit van het eind

Privé _customer als Klant
         _
        De openbare Klant van het Bezit () als Klant
            Krijg
                Keer _customer terug
            Het eind krijgt
            Reeks (waarde ByVal als Klant)
                _customer = waarde
            De Reeks van het eind
        Het Bezit van het eind

De Klasse van het eind

  _
    De openbare Klant van de Klasse
        Erft Verslag

        Privé _firstName als Koord
         _
        Openbaar Bezit FirstName () als Koord
            Krijg
                Keer _firstName terug
            Het eind krijgt
            Reeks (waarde ByVal als Koord)
                _firstName = waarde
            De Reeks van het eind
        Het Bezit van het eind
De Klasse van het eind

 _
Het openbare Verslag van de Klasse

Het eind Class


I probeert om OnsiteAppointment via WCF als dit bloot te stellen:

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
Overheidsfunctie GetAppointments (ByVal startDate als DateTime, ByVal endDate als DateTime) Instrumenten IOnsiteScheduler.GetAppointments als van de Lijst (van OnsiteAppointment)

            Probeer

                Verduister benoemingen als Nieuwe Lijst (van OnsiteAppointment)
…
                    Verduister benoeming als Nieuwe OnsiteAppointment
                    appointment.ID = lezer („appointmentId“)
                    appointment.StartDate = reader.SafeDate („startDate“)
                    .                    
                    Schemerige klant als Nieuwe Klant
                    customer.FirstName = reader.SafeString („firstName“)

                   benoeming. Klant = klant
                   benoemingen. Voeg toe (benoeming)
                   keer benoemingen terug
Beëindig Function


This de werkenBOETE zolang de „Klant“ niet van „Verslag“ erft. Zodra ik „Klant“ maak van „Verslag“ erven, wordt de volgende fout van HTTP ontvangen (de cliënt is Silverlight, kreeg ik deze fout van HTTP door het verkeer van HTTP te snuiven gebruikend „Fiddler2“ app):

HTTP/1.1 504 Fiddler - ontvang Failure
Content-Type: tekst/html
Connection: close
Timestamp: 02:37: ontbroken 54.822

ReadResponse (): De server keerde geen reactie voor dit verzoek terug.                    

… en natuurlijk de cliënt ontbreekt hebben ontvangend deze/>My vraag message.

Obviously „Verslag“ heeft geen probleem die worden blootgesteld, aangezien OnsiteAppointment goed blootgesteld wordt. Er is geen probleem die het genestelde type (OnsiteAppointment.Customer) eveneens blootstellen. Zo waarom zou het geven als de Klant van een type erft dat goed als basisklasse voor de andere klasse werkt?

Are daar om het even welke soorten beperkingen op het niveau van het nestelen van/het van verwijzingen voorzien van andere types wanneer het terugkeren van voorwerpen? Ik zou me van enkel het downloaden van duidelijke lege inzamelingen en „dan het verbinden van hen“ op de cliënt willen onthouden - ik zou het downloaden van de objecten structuur verkiezen enkel aangezien ik het in de bedrijfslaag… hulp

Any groot zou zijn heb!
Thanks

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

Antwoord : WCF nestelde complexe types

Hallo,

In WCF kunt u geen subklasse voor een basisklasse direct substitueren aangezien u in C# kunt.

U kunt een attribuut gebruiken de klasse tot de cliënt kunnen overgaan. Dit wordt gedaan op de Interface van de Dienst

KnownType - laat de klasse toe om door alle contracten en verrichtingen worden overgegaan gebruikend de basisklasse.
Dit is appliedto DataContract.
C#: [KnownType (typeof (Klant))]

ServiceKnownType - laat de klasse toe om slechts voor de verrichting worden overgegaan waarop het wordt bepaald.
Dit wordt toegepast op het Contract van de Dienst.

Persoonlijk gebruik ik ServiceKnownType
C#: [ServiceKnownType (typeof (Klant))]
VB.NET: ustomer))> _

Heb hier een blik
http://msdn.microsoft.com/en-us/library/system.servicemodel.serviceknowntypeattribute.aspx

Hoop dit helpt,

Darren
Andere oplossingen  
 
programming4us programming4us