通过 WCF 进行 REST 调用时如何获取响应 header 值?

How do I obtain a response header value when making a REST call via WCF?

我的代码使用 WCF 使用第三方 REST 服务。服务接口声明如下:

[ServiceContract(Namespace = "SomeNamespace",
     ConfigurationName = "SomeName")]
public interface ICoolService
{
    [OperationContract]
    [WebInvoke(Method = "POST", UriTemplate = @"whatever")]
    void CoolMethod(InputContainer input);
}

其中 InputContainer 声明为 DataContract:

[DataContract(Namespace = "whatever")]
public class InputContainer : IExtensibleDataObject
{
    //[DataMember]s inside
}

我的代码实例化使用 WebChannelFactory 来实例化一个 "channel object",然后通过 "channel object"

调用服务
ServiceEndpoint endpoint = ...craft endpoint;     
var factory = new WebChannelFactory<IServiceManagement>( endpoint );
var service = factory.CreateChannel();
service.CoolMethod( new InputContainer() );

而且效果很好。

现在是问题...该服务的文档说该服务 return 是一个带有 x-some-cool-header 和空 body 的响应。

如何获取该响应的值 header(最好是 CoolMethod() 的 return 值)?

最简单的方法是更改​​接口声明,使方法 returns System.ServiceModel.Channels.Message:

[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = @"whatever")]
Message CoolMethod(InputContainer input);

然后一旦方法调用完成,您将获得一个 Message object,其中包含带有 headers:

的 HTTP 响应
var invokationResult = service.CoolMethod( new InputContainer() );
var properties = message.Properties;
var httpResponse = 
    (HttpResponseMessageProperty)properties[HttpResponseMessageProperty.Name];
var responseHeaders = httpResponse.Headers;
var coolHeader = reponseHeaders["x-some-cool-header"];