WCF добавить параметр запроса не ожидается в подписи - PullRequest
0 голосов
/ 26 октября 2018

У меня есть контракт, используемый в 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(...)

Есть идеи, как мне это улучшить?

Примечание: я не могу вносить существенные изменения в контракт, поскольку это в основном устаревший код.

1 Ответ

0 голосов
/ 14 ноября 2018

Вы можете установить WCF Web Extensions пакет nuget ( ссылка nuget ).Затем вы сможете добавлять необязательные параметры запроса даже вне области действия 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.

...