MessageContract,通用返回类型和客户端命名问题

时间:2010-03-05 13:59:22

标签: .net asp.net wcf generics messagecontract

我正在构建一个使用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);

CompType1CompType2RequestContext类的属性。问题是哈希被添加到ServiceResultOfHCCertificateRequestzSOTD_SSj的末尾。我如何定义我的泛型返回类型,以便按预期生成客户端类型(没有哈希)?

1 个答案:

答案 0 :(得分:0)

我们在通过WCF返回通用列表时遇到了问题。

适用于我们的解决方案是创建一个具有单个属性的类,该属性是通用列表。

然后我们通过WCF发送该类。如果您有许多此类列表,则可以创建一个具有类型T列表的类。这样,在创建类时,您可以指定所需的列表类型。