0

SOAPヘッダーにカスタムフィールドを追加したいので、MessageContractsを使用するWebサービスを構築しています。前のトピックで、複合応答をラップする必要があることを学びました。この目的のために、私は汎用の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 に答える