Je crée un service Web qui utilise MessageContracts, car je souhaite ajouter des champs personnalisés à mon en-tête SOAP. Dans un previous topic, j'ai appris qu'une réponse composite doit être enveloppée. Pour ce faire, j'ai conçu une classe ResponseWrapper générique.Problème avec MessageContract, types de retour génériques et dénomination client
[MessageContract(WrapperNamespace = "http://mynamespace.com",
WrapperName="WrapperOf{0}")]
public class ResponseWrapper<T>
{
[MessageBodyMember(Namespace = "http://mynamespace.com")]
public T Response
{
get;
set;
}
}
J'ai fait une classe de base ServiceResult, définie comme suit:
[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;
}
}
Pour être en mesure d'inclure le contexte de la demande dans la réponse, j'utilise une classe dérivée de ServiceResult, qui utilise des génériques:
[MessageContract(WrapperNamespace = "http://mynamespace.com",
WrapperName = "ServiceResultOf{0}")]
public class ServiceResult<TRequest> : ServiceResult
{
[MessageBodyMember]
public TRequest Request
{
get;
set;
}
}
Cette option est utilisée de la manière suivante
[OperationContract()]
ResponseWrapper<ServiceResult<HCCertificateRequest>> OrderHealthCertificate(RequestContext<HCCertificateRequest> context);
Je me attendais mon code client à générer comme
ServiceResultOfHCCertificateRequest OrderHealthCertificate(RequestContextOfHCCertificateRequest context);
Au lieu de cela, je reçois le texte suivant:
ServiceResultOfHCCertificateRequestzSOTD_SSj OrderHealthCertificate(CompType1 c1, CompType2 c2, HCCertificateRequest context);
CompType1
et CompType2
sont propriétés de la classe RequestContext
. Le problème est qu'un hash est ajouté à la fin de ServiceResultOfHCCertificateRequestzSOTD_SSj
. Comment ai-je besoin de définir mes types de retour génériques pour que le type de client soit généré comme prévu (sans le hachage)?
J'utilise des types de retour génériques, donc je n'ai pas besoin de définir tout un tas de classes spécifiques. Peut-être que je ne comprends pas ce que vous suggérez, pourriez-vous en dire plus? – Soeteman