如何使用 OperationContract 从 POST 请求中捕获响应 header?

How do I use OperationContract to capture a response header from POST request?

我有以下 WCF 包装器来调用 REST 服务:

[DataContract]
public class InterestingResponse : IExtensibleDataObject
{
    [MessageHeader(Name="x-interesting-id")]
    public string InterestingId { get; set; }

    public ExtensionDataObject ExtensionData { get; set; }
}

[ServiceContract()]
public interface IManagement
{
    [OperationContract]
    [WebInvoke(Method = "POST", UriTemplate = @"somePathHere")]
    InterestingResponse DoInteresting();
}

正在向服务发送请求并成功完成。 HTTP 响应有空 body 和 x-interesting-id header。我希望客户端代码 return InterestingResponse 的一个实例,其中 InterestingId 被设置为来自响应的 x-interesting-id 的值。

一旦 IManagement.DoInteresting() return 在客户端上空引用被 returned 因为好吧,响应是空的,我猜没有什么可以反序列化。

如何将 object returned 与 header 值反序列化为 object 成员?

System.ServiceModel.Channels.Message用作here。将方法声明更改为:

[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = @"somePathHere")]
Message DoInteresting();

然后一旦调用完成,Message object 将包含带有 HTTP headers:

的 HTTP 响应
var invokationResult = service.DoInteresting();
var properties = message.Properties;
var httpResponse = 
    (HttpResponseMessageProperty)properties[HttpResponseMessageProperty.Name];
var responseHeaders = httpResponse.Headers;
var interestingHeader = reponseHeaders["x-interesting-id"];