2009-02-04 20 views
19

Estoy usando una clase genérica como contrato de datos de respuesta. Todo está bien y esto está agilizando significativamente el diseño de mi servicio WCF.Nombrando DataContracts genéricos en WCF

Cada solicitud se le da un objeto de respuesta estándar con la siguiente firma:

  • Estado (Enum)
  • mensaje (String)
  • Resultado (T)

A continuación se muestra la Clase de respuesta:

[DataContract] 
    public class Response<T> 
    { 
     public Response() {} 

     public Response(T result) 
     { 
      this.result = result; 
      if (result != null) 
      { 
       this.status = Status.StatusEnum.Success; 
      } 
      else 
      { 
       this.status = Status.StatusEnum.Warning; 
      } 
     } 

     public Response(T result, Status.StatusEnum status) 
     { 
      this.status = status; 
      this.message = message; 
     } 

     public Response(T result, Status.StatusEnum status, string message) 
     { 
      this.status = status; 
      this.message = message; 
      this.result = result; 
     } 

     [DataMember] 
     public Status.StatusEnum status { get; set; } 

     [DataMember] 
     public string message { get; set; } 

     [DataMember] 
     public T result { get; set; } 
    } 

Y esto funciona brillantemente. El único problema que tengo es que al WCF Client se le da un nombre desagradable para este objeto "ResponseOfAccountnT9LOUZL"

¿Hay alguna forma de evitar este problema?

¿Debo utilizar esta clase como una clase abstracta que se hereda? Prefiero no tener múltiples clases abarrotando mi código.

+4

Aquí es el valor de stackoverflow para mí ... Sabía que había hecho esta pregunta antes. ¡e incluso había respondido! Y ahí está - gracias –

+0

cuál es su tipo de devolución de su método de servicio principal. es decir, ¿podría usted cómo debe usar esto? PLZ – Seabizkit

Respuesta

27

Ok encontró el Answer

Puede especificar la versión serializada utilizando la siguiente sintaxis:

[DataContract (Name = "MyClassOf {0} {1}")]

clase MyClass {}

Así que si tuviera una clase llamada Response que tomara un parámetro Generic T Me gustaría utilizar

[DataContract (Name = "ResponseOfType {0}")]

respuesta de la clase {}

1
[DataContract(Name = "ReturnObjectOfType{0}")] 
    public class ReturnObject<T> 
    {.... 

//Iservice 
[OperationContract] 
     ReturnObject<AdresKisiBilgi> BeldeAdresKisiBilgiSorgula(string tcKimlikNo); 


//Service 
public ReturnObject<HbysBusiness.MernisGuvenService.AdresKisiBilgi> BeldeAdresKisiBilgiSorgula(string tcKimlikNo) 
     { 
      return new MernisBiz().BeldeAdresKisiBilgiSorgula(tcKimlikNo); 
     } 


client: 
public ReturnObjectOfAdresKisiBilgi BeldeAdresKisiBilgiSorgula(string tcKimlikNo) 
     {.... 

Gracias Harry