2009-02-04 4 views
19

Я использую общий класс в качестве контракта данных ответа. Все это хорошо, и это значительно упрощает дизайн моей услуги WCF.Именование общих DataContracts в WCF

Каждый запрос получает стандартный объект ответа со следующей подписью:

  • Статус (Enum)
  • сообщений (String)
  • Результат (T)

Ниже Класс ответа:

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

И это работает блестяще. Единственная проблема, с которой я столкнулся, заключается в том, что клиенту WCF дается действительно дрянное имя для этого объекта «ResponseOfAccountnT9LOUZL»

Есть ли способ обойти эту проблему?

Должен ли я использовать этот класс как абстрактный класс, который наследуется? Я бы предпочел не иметь несколько классов, загромождающих мой код.

+4

Вот значение stackoverflow для меня ... Я знал, что раньше задавал этот вопрос. и даже ответил! И вот оно - спасибо –

+0

Каков ваш тип возврата вашего основного метода обслуживания. т.е. можете ли вы, как вы это используете. PLZ – Seabizkit

ответ

27

Ok нашли Answer

Вы можете указать сериализованную версию, используя следующий синтаксис:

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

класса MyClass {}

Так что если бы у меня был класс, называемый Response, который принимает параметр Generic T Я хотел бы использовать

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

класс Response {}

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

Спасибо Гарри

Смежные вопросы