在WCF中使用自定义Http报头
本文关键字:自定义 Http 报头 WCF | 更新日期: 2023-09-27 18:03:26
我尝试使用SOA服务。我从wsdl生成一个服务引用,然后用我的绑定配置实例化一个客户端对象,它是一个basicHttpBinding。
然后我实现一个自定义行为和一个消息检查器,在那里我添加我的自定义头属性如下所示…
public object BeforeSendRequest(ref System.ServiceModel.Channels.Message request, System.ServiceModel.IClientChannel channel)
{
request.Properties.Add("CONTENT-TYPE", "text/xml;charset=UTF-8");
request.Properties.Add("PropertyOne", "One");
request.Properties.Add("PropertyTwo", "Two");
return null;
}
然后,当我尝试使用该服务时,我总是得到错误消息
(502) Bad Gateway.
使用fiddler,我查看发送到服务的原始http数据,自定义属性不在头中。
要向消息添加自定义HTTP头,您需要将它们添加到消息属性包的HttpRequestMessageProperty
实例中:
public object BeforeSendRequest(ref Message request, IClientChannel channel)
{
HttpRequestMessageProperty prop;
if (request.Properties.ContainsKey(HttpRequestMessageProperty.Name))
{
prop = (HttpRequestMessageProperty)request.Properties[HttpRequestMessageProperty.Name];
}
else
{
prop = new HttpRequestMessageProperty();
request.Properties.Add(HttpRequestMessageProperty.Name, prop);
}
prop.Headers["Content-Type"] = "text/xml; charset=UTF-8";
prop.Headers["PropertyOne"] = "One";
prop.Headers["PropertyTwo"] = "Two";
return null;
}
我也想做类似的事情,并有幸与WeboperationContext
WebOperationContext.Current.OutgoingResponse。StatusCode = HttpStatusCode.Accepted;WebOperationContext.Current.OutgoingResponse.Headers。添加("HeaderName"、"HeaderValue");
效果很好