我正在构建一个使用 MessageContracts 的 Web 服务,因为我想将自定义字段添加到我的 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
. 我如何需要定义我的通用返回类型才能按预期生成客户端类型(没有哈希)?