2015-04-16 10 views
0

Мой код использует стороннюю службу REST с использованием WCF. Сервисный интерфейс объявлен как это:Как получить значение заголовка ответа при вызове REST через WCF?

[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 для создания экземпляра «объекта канала», а затем делает звонки на службу с помощью «Объект канала»

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

и он работает очень хорошо.

Теперь проблема ... Документация к этой службе говорит, что служба возвращает ответ с x-some-cool-header и пустым телом.

Как получить значение этого заголовка ответа (желательно как возвращаемое значение CoolMethod())?

+0

Вы имеете в виду, как вы добавляете заголовок к вашему ответу? Какой клиент вы используете для вызова службы? Вам нужно будет опубликовать клиентскую часть кода. В какой документации вы ссылаетесь? –

+0

@JamesRalston Я попытался уточнить мои настройки. Мой код использует сторонний сервис. – sharptooth

ответ

0

Самый простой способ изменить объявление интерфейса, так что метод возвращает System.ServiceModel.Channels.Message:

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

затем один раз метод invokation будет завершена, вы получите Message объект, который содержит ответ 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"]; 
Смежные вопросы