Questione : WCF ha annidato i tipi complessi

Ciao, il

I ha un problema esporre un codice categoria via WCF, quando sta riferendo un altro oggetto, che vorrei trasmettere “giù il legare„ pure. il
To lo rende più facile, qui è una struttura semplificata che mostra il problema: il

There è 3 codici categoria: Annotazione (un codice categoria basso), OnsiteAppointment e cliente (entrambi ereditano dall'annotazione). class= " lineNumbers " >
1 del >

   _
    Codice categoria pubblico OnsiteAppointment
        Eredita l'annotazione

        _startDate riservato come DateTime
         _
        Proprietà pubblica StartDate () come DateTime
            Ottenere
                Restituire il _startDate
            L'estremità ottiene
            Regolar (valore di ByVal come DateTime)
                _startDate = valore
            Insieme dell'estremità
        Proprietà dell'estremità

_customer riservato come cliente
         _
        Cliente della proprietà pubblica () come cliente
            Ottenere
                Restituire il _customer
            L'estremità ottiene
            Regolar (valore di ByVal come cliente)
                _customer = valore
            Insieme dell'estremità
        Proprietà dell'estremità

Codice categoria dell'estremità

  _
    Cliente pubblico del codice categoria
        Eredita l'annotazione

        _firstName riservato come stringa
         _
        Proprietà pubblica FirstName () come stringa
            Ottenere
                Restituire il _firstName
            L'estremità ottiene
            Regolar (valore di ByVal come stringa)
                _firstName = valore
            Insieme dell'estremità
        Proprietà dell'estremità
Codice categoria dell'estremità

 _
Annotazione pubblica del codice categoria

La prova " libera " di >

I del class= dell'estremità Class
1 del >

Funzione pubblica GetAppointments (startDate di ByVal come endDate di ByVal, di DateTime come DateTime) come strumenti IOnsiteScheduler.GetAppointments della lista (di OnsiteAppointment)

            Prova

                Appuntamenti fiochi come nuova lista (di OnsiteAppointment)
…
                    Appuntamento fioco come nuovo OnsiteAppointment
                    appointment.ID = lettore (“appointmentId„)
                    appointment.StartDate = reader.SafeDate (“startDate„)
                    .                    
                    Cliente fioco come nuovo cliente
                    customer.FirstName = reader.SafeString (“firstName„)

                   appuntamento. Cliente = cliente
                   appuntamenti. Aggiungere (appuntamento)
                   restituire gli appuntamenti
Concludere gli impianti " liberi " di >

This del class= di Function

HTTP/1.1 504 - ricevere Failure
Content-Type: testo/html
Connection: close
Timestamp: 02:37: 54.822

ReadResponse () è venuto a mancare: L'assistente non ha restituito una risposta per questa richiesta.                    il

… e naturalmente i venire a mancare del cliente che ricevono questo problema di message.

My è: Che cosa sono io che faccio male qui? il
Obviously “annotazione„ non ha problema che è esposto, poiché OnsiteAppointment ottiene esposto bene. Non ci è problema che espone il tipo annidato (OnsiteAppointment.Customer) pure. Così perché si preoccuperebbe se il cliente eredita da un tipo che sta funzionando bene come codice categoria basso per l'altro codice categoria?

Are là dei tipi di limitazioni al livello di incastramento/di riferire altri tipi quando restituiscono gli oggetti? Vorrei astenermi da appena dal caricamento di programmi oggetto delle collezioni vuote normali ed allora “dalla legatura loro su„ sul cliente - preferirei caricare programmi oggetto la struttura dell'oggetto appena poichè la ho nell'aiuto del

Any di strato di affari… sarei grande!
Thanks

Environment: .NET 4.0, CONTRO 2010, IIS 7, Win7 64bit
class= del

Risposta : WCF ha annidato i tipi complessi

Ciao,

In WCF non potete sostituire direttamente un codice categoria secondario per un codice categoria basso come potete in C#.

Potete usare un attributo per potere passare il codice categoria al cliente. Ciò è fatta sull'interfaccia di servizio

KnownType - permette che il codice categoria sia passato durante tutti i contratti e funzionamenti using il codice categoria basso.
Ciò è appliedto il DataContract.
C#: [KnownType (typeof (cliente))]

ServiceKnownType - permette che il codice categoria sia passato soltanto per il funzionamento su cui è definito.
Ciò si applica al contratto relativo a servizi.

Personalmente uso ServiceKnownType
C#: [ServiceKnownType (typeof (cliente))]
VB.NET: ustomer))> _

Avere uno sguardo qui
http://msdn.microsoft.com/en-us/library/system.servicemodel.serviceknowntypeattribute.aspx

Sperare che questo aiuti,

Darren
Altre soluzioni  
 
programming4us programming4us