我有一个WCF POST中使用的合同。 在通话过程中,我需要添加一个无法在签名中添加的额外参数,因为会出现歧义消除问题。
合同:
[OperationContract]
[WebInvoke(UriTemplate = "", Method = "POST")]
Y Create(Stream x);
[OperationContract]
[WebInvoke(UriTemplate = "?cmd=put", Method = "POST")]
Y Create2(Stream x);
我想做的是更改WebOperationContext.Current.OutgoingRequest
以添加此参数bool allowOverwrite
。
使其生效的唯一方法是添加标题,这不是一个好选择。 WebOperationContext.Current.OutgoingRequest.Headers.Add(...)
有什么办法可以改善这个问题吗?
注意:我不能对合同进行重大更改,因为它主要是遗留代码。
答案 0 :(得分:0)
您可以安装WCF Web Extensions nuget软件包(nuget link)。然后,即使在WebOperationContext范围之外,您也可以添加可选的查询参数,如下所示:
using (var factory = new WebChannelFactory<IQueryParametersTestService>(new WebHttpBinding()))
{
factory.Endpoint.Address = new EndpointAddress(ServiceUri);
factory.Endpoint.EndpointBehaviors.Add(new QueryParametersServiceBehavior());
using (var client = factory.CreateWebChannel())
{
client.AddQueryParameter("format", "xml");
client.AddQueryParameter("version", "2");
var result = client.Channel.GetReport();
}
}
在服务器端,您可以使用WebOperationContext检索可选的查询参数。