WCF добавить параметр запроса не ожидается в подписи

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

Вы можете установить пакет nuget WCF Web Extensions ( ссылка 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.

Другие вопросы по тегам