【问题标题】:Problem with MessageContract, Generic return types and clientside namingMessageContract、通用返回类型和客户端命名问题
【发布时间】:2010-03-05 13:59:22
【问题描述】:

我正在构建一个使用 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 的末尾添加了一个哈希。我需要如何定义我的通用返回类型才能按预期生成客户端类型(没有哈希)?

【问题讨论】:

    标签: .net asp.net wcf generics messagecontract


    【解决方案1】:

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

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

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

    【讨论】:

    • 我使用通用返回类型,所以我不必定义一大堆特定的类。可能我没明白你的意思,你能详细说明一下吗?
    猜你喜欢
    • 2020-05-15
    • 2020-10-27
    • 2021-01-13
    • 2019-02-11
    • 2023-01-18
    • 2020-01-07
    • 2015-01-31
    • 2011-09-21
    • 1970-01-01
    相关资源
    最近更新 更多