Именование универсальных контрактов данных в WCF
-
21-08-2019 - |
Вопрос
Я использую общий класс в качестве контракта данных ответа.Все хорошо, и это значительно упрощает дизайн моего сервиса WCF.
Каждому запросу предоставляется стандартный объект ответа со следующей сигнатурой:
- Статус (перечисление)
- Сообщение (строка)
- Результат (Т)
Ниже приведен класс ответа:
[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».
Есть ли способ обойти эту проблему?
Должен ли я использовать этот класс просто как абстрактный класс, который наследуется?Я бы предпочел, чтобы несколько классов не загромождали мой код.
Решение
Хорошо, нашел Отвечать
Вы можете указать сериализованную версию, используя следующий синтаксис:
[DataContract(Name = "MyClassOf{0}{1}")]
класс МойКласс { }
Поэтому, если бы у меня был класс, называемый ответом, который принимает общий параметр t, я бы использовал
[DataContract(Name = "ResponseOfType{0}")]
класс Ответ { }
Другие советы
[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)
{....
Спасибо, Гарри