向 REST WCF 请求添加标头 - EnvelopeNone 不支持添加消息标头异常

5 rest wcf header

我正在尝试向 wcf 客户端添加自定义标头,以达到标准的 RESTful 端点。我正在尝试添加某种标头,它只允许我跟踪从一层到下一层的请求。这是我尝试实现它的方式:

public class DynatracePurePathHeaderAppender : IClientMessageInspector, IEndpointBehavior
 {
  object IClientMessageInspector.BeforeSendRequest(ref Message request, IClientChannel channel)
  {
   var dynaHeader = MessageHeader.CreateHeader("Action", "ns.yellowbook.jeff", "dynatrace",false);
   request.Headers.Add(dynaHeader);
   return null;
  }

  void IClientMessageInspector.AfterReceiveReply(ref Message reply, object correlationState)
  {
   return;
  }

  public void Validate(ServiceEndpoint endpoint){}

  public void AddBindingParameters(ServiceEndpoint endpoint, BindingParameterCollection bindingParameters){}

  public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher){}

  public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime)
  {
   clientRuntime.MessageInspectors.Add(this);
  }
 }

public class DynatracePurePathHeaderAppenderElement : BehaviorExtensionElement
 {
  protected override object CreateBehavior()
  {
   return new DynatracePurePathHeaderAppender();
  }

  public override Type BehaviorType
  {
   get { return typeof(DynatracePurePathHeaderAppender); }
  }
 }
Run Code Online (Sandbox Code Playgroud)

然后我成功配置了客户端,但是当它运行时,我收到以下异常:

System.InvalidOperationException:信封版本“EnvelopeNone ( http://schemas.microsoft.com/ws/2005/05/envelope/none )”不支持添加消息头。

有人对如何插入这个小小的钡餐有什么建议吗?

Eug*_*sky 5

我假设您的意思是 HTTP 标头而不是 SOAP 标头?如果是这样,MessageHeader 与此无关。

尝试这样的事情:

HttpRequestMessageProperty hrmp = new HttpRequestMessageProperty();
//Set hrmp.Headers, then:
request.Properties.Add(HttpRequestMessageProperty.Name, hrmp);
Run Code Online (Sandbox Code Playgroud)

一般来说,WCF REST 支持并没有在客户端真正优化(它的创建主要是为了允许人们创建REST 服务)。要获得更好的客户端 REST 支持,请查看 WCF REST Starter Kit 中的 HttpClient。