Cuestión : WCF jerarquizó tipos complejos

Hola, el

I tiene un problema el exponer de una clase vía WCF, cuando se está refiriendo a otro objeto, que quisiera enviar “abajo del alambre” también. el
To lo hace más fácil, aquí es una estructura simplificada que demuestra el problema: el

There es 3 clases: Expediente (una clase baja), OnsiteAppointment y cliente (ambos heredan de expediente). class= " lineNumbers " >
1 del >

   _
    Clase pública OnsiteAppointment
        Hereda el expediente

        _startDate privado como fecha y hora
         _
        Característica pública StartDate () como fecha y hora
            Conseguir
                Volver el _startDate
            El extremo consigue
            Fijar (valor de ByVal como fecha y hora)
                _startDate = valor
            Sistema del extremo
        Característica del extremo

_customer privado como cliente
         _
        Cliente de la característica pública () como cliente
            Conseguir
                Volver el _customer
            El extremo consigue
            Fijar (valor de ByVal como cliente)
                _customer = valor
            Sistema del extremo
        Característica del extremo

Clase del extremo

  _
    Cliente público de la clase
        Hereda el expediente

        _firstName privado como secuencia
         _
        Característica pública FirstName () como secuencia
            Conseguir
                Volver el _firstName
            El extremo consigue
            Fijar (valor de ByVal como secuencia)
                _firstName = valor
            Sistema del extremo
        Característica del extremo
Clase del extremo

 _
Expediente público de la clase

El intento " claro " de >

I del class= del extremo Class
1 del >

Función pública GetAppointments (startDate de ByVal como endDate de la fecha y hora, de ByVal como fecha y hora) como los instrumentos IOnsiteScheduler.GetAppointments de la lista (de OnsiteAppointment)

            Intento

                Citas déviles como nueva lista (de OnsiteAppointment)
…
                    Cita dévil como nuevo OnsiteAppointment
                    appointment.ID = lector (“appointmentId”)
                    appointment.StartDate = reader.SafeDate (“startDate”)
                    .                    
                    Cliente dévil como nuevo cliente
                    customer.FirstName = reader.SafeString (“firstName”)

                   cita. Cliente = cliente
                   citas. Agregar (cita)
                   volver las citas
Terminar los trabajos " claros " de >

This del class= de Function

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

ReadResponse () falló: El servidor no volvió una respuesta para esta petición.                    el

… y por supuesto los fall del cliente que reciben esta pregunta de message.

My está: ¿Cuáles son yo que hace mal aquí? el
Obviously “expediente” no tiene ningún problema que es expuesto, puesto que OnsiteAppointment consigue expuesto bien. No hay problema que expone el tipo jerarquizado (OnsiteAppointment.Customer) también. ¿Tan porqué cuidaría si el cliente hereda de un tipo que esté trabajando bien como clase baja para la otra clase? ¿

Are allí tipos de restricciones en el nivel de jerarquización/de referirse a otros tipos al volver objetos? ¡Quisiera refrenarme apenas de transferir colecciones vacías llanas y después de “atarlas encima de” en el cliente - preferiría el transferir de la estructura del objeto apenas pues la tengo en la ayuda del

Any de la capa del negocio… sería grande!
Thanks

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

Respuesta : WCF jerarquizó tipos complejos

Hola,

En WCF usted no puede substituir una clase secundaria para una clase baja directo como usted puede en C#.

Usted puede utilizar una cualidad para poder pasar la clase al cliente. Esto se hace en el interfaz del servicio

KnownType - permite que la clase sea pasada a través de todos los contratos y operaciones usar la clase baja.
Éste es appliedto el DataContract.
C#: [KnownType (typeof (cliente))]

ServiceKnownType - permite que la clase sea pasada solamente para la operación en la cual se define.
Esto se aplica al contrato de servicio.

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

Tener una mirada aquí
http://msdn.microsoft.com/en-us/library/system.servicemodel.serviceknowntypeattribute.aspx

Esperar que esto ayude,

Darren
Otras soluciones  
 
programming4us programming4us