0

我正在构建一个使用 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并且CompType2RequestContext类的属性。问题是在ServiceResultOfHCCertificateRequestzSOTD_SSj. 我如何需要定义我的通用返回类型才能按预期生成客户端类型(没有哈希)?

4

1 回答 1

0

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

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

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

于 2010-03-05T15:24:27.580 回答