我正在尝试向 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 )”不支持添加消息头。
有人对如何插入这个小小的钡餐有什么建议吗?
我假设您的意思是 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。
| 归档时间: |
|
| 查看次数: |
7549 次 |
| 最近记录: |