使用WebHttpBinding的传出消息上的SOAPAction标头

时间:2019-01-25 15:57:13

标签: wcf

我试图发出http标头,但是wcf却以某种方式对其进行过滤。

[ServiceContract()]
public interface IHelloWorld
{
    [OperationContract(Action = "*", IsOneWay = false, ReplyAction = "*")]
    void Hello(string text);
}

        var channel = new ChannelFactory<IHelloWorld>(new WebHttpBinding(), "http://some.where");
        channel.Endpoint.Behaviors.Add(new WebHttpBehavior());
        var proxy = channel.CreateChannel();
        using (OperationContextScope scope = new OperationContextScope((IContextChannel)proxy))
        {
            MessageProperties messageProperties = OperationContext.Current.OutgoingMessageProperties;

            var requestMessageProperty = new HttpRequestMessageProperty();
            messageProperties.Add(HttpRequestMessageProperty.Name, requestMessageProperty);

            requestMessageProperty.Headers.Add("SOAPAction", "test");
            requestMessageProperty.Headers.Add("Test", "test2");

            proxy.Hello("test");
        }

测试此代码时,请求中包含标头Test,但SOAPAction中没有标头。 我尝试了使用IClientMessageInspector,但是它也不起作用。 我不能使用其他绑定(基本绑定或更多Soap专用绑定)。

1 个答案:

答案 0 :(得分:0)

据我所知,SOAPAction字段是HTTP标头默认字段,用于指示当服务器服务使用非webhttp绑定时正在调用的操作方法。
我不认为可以通过截取消息/操作上下文来任意指定它。 enter image description here