1

我尝试使用 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错误的网关。

使用提琴手,我查看发送到服务的原始 http 数据,自定义属性不在标题中。

4

2 回答 2

3

要将自定义 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;
}
于 2013-03-12T15:28:19.567 回答
0

我也想做类似的事情,并且幸运地使用了 WeboperationContext

WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.Accepted; WebOperationContext.Current.OutgoingResponse.Headers.Add("HeaderName", "HeaderValue");

它就像一个魅力

于 2015-07-28T23:01:37.573 回答