我目前正在为我无法控制的 Java Web 服务编写 WCF 客户端。WCF 似乎使用端点地址填充 WSA To 标头,但此 Web 服务需要不同的值。
我目前正在尝试手动设置值,如下所示:
var binding = new CustomBinding();
binding.Elements.Add(GetSecurityElement());
binding.Elements.Add
(
new TextMessageEncodingBindingElement
(
MessageVersion.Soap11WSAddressing10,
Encoding.UTF8
)
);
binding.Elements.Add(new HttpsTransportBindingElement());
var endpoint = new EndpointAddress
(
new Uri("endpoint address"),
new DnsEndpointIdentity("endpoint identity"),
new AddressHeaderCollection()
);
var client = new Client(binding, endpoint);
client.Open();
using (new OperationContextScope(client.InnerChannel))
{
OperationContext.Current.OutgoingMessageHeaders.To = new Uri("some other address");
OperationContext.Current.OutgoingMessageHeaders.MessageId = new UniqueId("message id");
var response = client.doSomething();
}
检查使用 Fiddler 生成和发送的请求,我可以看到 MessageID 标头已成功设置为“消息 ID”,而不是默认的 urn:uuid:[some uuid],但 To 标头仍设置为“端点地址”而不是“其他地址”。
还有其他方法可以覆盖标头值吗?