9

共通のヘッダーを持ついくつかのサービスを構築しています。このヘッダーは、リクエストでは特定のレイアウトを持ち、レスポンスでは別のレイアウトを持ちます (つまり、2 つのクラスがあります)。

ただし、参照を追加するか、svcutil を使用すると、要求と応答の両方のタイプで同じヘッダーを使用してプロキシが生成されます。

例えば:

[MessageContract]
class Contract<THeader, TBody>
{
    [MessageHeader] public THeader Header { get; set; }

    [MessageBodyMember] public TBody Body { get; set; }
}

class MyRequestHeader
{
    public string RequestorId { get; set; }
}

class MyResponseHeader
{
    public string ErrorMessage  { get; set; }
}

OperationContract は次のようなものです。

[OperationContract]
public Contract<MyResponseHeader, ResponseBody> Process(Contract<MyRequestHeader, RequestBody> data);

プロキシは次のようになります。

var client = new ...; 
var header = new MyRequestHeader(); 
var body = new RequestBody();

**ResponseBody** 

response = client.Process(ref header, body);

ご覧のとおり、ヘッダー (Request) は ref として渡されます。これはおそらく、WCF がこのヘッダーを要求と応答で同じものとして持っていることを意味します。MyResponseHeader が消えます。

誰でも主題に光を当てることができますか?

4

1 に答える 1