Pregunta

Es mi entendimiento de que cada tipo (con excepción de algunos primitivos como int y string) se utiliza en una necesidad WCF ServiceContract a ser declarada con el atributo ServiceKnownType. Pero, tengo que construir un objeto personalizado y se transmite al otro lado de mi servicio WCF sin ningún problema - a pesar de que no he añadido una ServiceKnownType por ello. Por favor alguien explicar por qué esto funciona?

[ServiceContract(CallbackContract = typeof(IMyServiceCallback))]
public interface IMyService
{
    [OperationContract]
    List<MyObject> LoadMyObjects();
}

[DataContract]
public class MyObject
{
    [DataMember]
    private int batchID;
    [DataMember]
    private int fileID;
    [DataMember]
    private string fileName;
    [DataMember]
    private DateTime importStartTime;
// ...
}
¿Fue útil?

Solución

No, no es correcto. ServiceKnownType (o KnownTypeAttribute el contrato de datos) sólo es necesaria para los tipos utilizados por el servicio, pero no especifican en la operación definición. En su caso se ha definido la operación LoadMyObjects que utiliza la clase MiObjeto. Debido a que la operación se utilizan directamente MiObjeto que no tiene que añadir MiObjeto como ServicKnownType. Pero si se define MyObject2 deriva de MiObjeto usted no será capaz de enviar ese objeto de la operación LoadMyObjects hasta que se declara como MyObject2 ServiceKnownType.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top