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
およびCompType2
はRequestContext
クラスのプロパティです。問題は、ハッシュがの末尾に追加されることですServiceResultOfHCCertificateRequestzSOTD_SSj
。クライアントタイプを期待どおりに(ハッシュなしで)生成するには、ジェネリックリターンタイプをどのように定義する必要がありますか?