Я создаю веб-сервис, который использует MessageContracts, потому что я хочу добавить настраиваемые поля в мой заголовок SOAP. В предыдущей теме я узнал, что составной ответ должен быть упакован. Для этой цели я разработал общий класс ResponseWrapper.
[MessageContract(WrapperNamespace = "http://mynamespace.com",
WrapperName="WrapperOf{0}")]
public class ResponseWrapper<T>
{
[MessageBodyMember(Namespace = "http://mynamespace.com")]
public T Response
{
get;
set;
}
}
Я создал базовый класс ServiceResult, определенный следующим образом:
[MessageContract(WrapperNamespace = "http://mynamespace.com")]
public class ServiceResult
{
[MessageBodyMember]
public bool Status
{
get;
set;
}
[MessageBodyMember]
public string Message
{
get;
set;
}
[MessageBodyMember]
public string Description
{
get;
set;
}
}
Чтобы иметь возможность включить контекст запроса в ответ, я использую производный класс ServiceResult, который использует обобщения:
[MessageContract(WrapperNamespace = "http://mynamespace.com",
WrapperName = "ServiceResultOf{0}")]
public class ServiceResult<TRequest> : ServiceResult
{
[MessageBodyMember]
public TRequest Request
{
get;
set;
}
}
Это используется следующим образом
[OperationContract()]
ResponseWrapper<ServiceResult<HCCertificateRequest>> OrderHealthCertificate(RequestContext<HCCertificateRequest> context);
Я ожидал, что мой код клиента будет сгенерирован как
ServiceResultOfHCCertificateRequest OrderHealthCertificate(RequestContextOfHCCertificateRequest context);
Вместо этого я получаю следующее:
ServiceResultOfHCCertificateRequestzSOTD_SSj OrderHealthCertificate(CompType1 c1, CompType2 c2, HCCertificateRequest context);
CompType1
и CompType2
являются свойствами класса RequestContext
. Проблема в том, что хеш добавляется в конец ServiceResultOfHCCertificateRequestzSOTD_SSj
. Как мне определить общие типы возвращаемых данных, чтобы тип клиента был сгенерирован должным образом (без хэша)?