共通のヘッダーを持ついくつかのサービスを構築しています。このヘッダーは、リクエストでは特定のレイアウトを持ち、レスポンスでは別のレイアウトを持ちます (つまり、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 が消えます。
誰でも主題に光を当てることができますか?