2016-03-16 4 views
0

У меня есть следующие WCF оболочки для вызова службы REST:Как использовать OperationContract для захвата заголовка ответа из запроса POST?

[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 имеет пустой корпус и заголовок x-interesting-id. Я хочу, чтобы код на стороне клиента возвращал экземпляр InterestingResponse с InterestingId, который был установлен на значение x-interesting-id из ответа.

После того, как IManagement.DoInteresting() возвращается на клиент, возвращается нулевая ссылка, потому что хорошо, ответ был пуст, ничего, чтобы десериализовать, я думаю.

Как бы мне вернуть объект вместо значения заголовка, десериализованного как член объекта?

ответ

0

Использовать System.ServiceModel.Channels.Message как here. Изменить объявление метода в:

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

затем еще invokation завершено, Message объект будет содержать ответ HTTP с 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"];