我正在构建一个使用MessageContracts的Web服务,因为我想在SOAP标头中添加自定义字段。在previous topic中,我了解到必须包含复合响应。为此,我设计了一个通用的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
的末尾。我如何定义我的泛型返回类型,以便按预期生成客户端类型(没有哈希)?
答案 0 :(得分:0)
我们在通过WCF返回通用列表时遇到了问题。
适用于我们的解决方案是创建一个具有单个属性的类,该属性是通用列表。
然后我们通过WCF发送该类。如果您有许多此类列表,则可以创建一个具有类型T列表的类。这样,在创建类时,您可以指定所需的列表类型。