2009-02-04 14 views
19

Sto utilizzando una Classe generica come contratto di risposta. Tutto è buono e questo sta semplificando significativamente la progettazione del mio servizio WCF.Denominazione di dati genericiContratti in WCF

Ogni richiesta viene dato un oggetto di risposta standard con la seguente firma:

  • Stato (Enum)
  • Message (String)
  • Risultato (T)

riportano di seguito le Response Class:

[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; } 
    } 

E questo funziona brillantemente. L'unico problema che ho è che al client WCF viene dato un nome davvero schifoso per questo oggetto "ResponseOfAccountnT9LOUZL"

C'è un modo per aggirare questo problema?

Devo usare questa classe solo come una classe astratta che viene ereditata? Preferirei non avere più classi che ingombrano il mio codice.

+4

Ecco il valore di StackOverflow per me ... Sapevo che avevo già fatto questa domanda prima. e aveva persino risposto! Ed eccolo - grazie –

+0

qual è il tuo tipo di reso del tuo metodo di servizio principale. cioè potresti dovresti come lo usi? PLZ – Seabizkit

risposta

27

Ok trovato il Answer

È possibile specificare la versione serializzata utilizzando la seguente sintassi:

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

classe MyClass {}

Quindi, se avessi una classe chiamata Risposta che accetta un parametro T generico Userei

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

risposta di classe {}

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) 
     {.... 

Grazie Harry