я пытаюсь настроить веб-службу WCF, предоставляемую через IIS, в которой есть один метод с именем GetArticle
. Этот метод должен вызываться с несколькими обязательными параметрами, такими как userName
и password
, а также с другими необязательными параметрами (например, brand
).
Итак, подпись метода выглядит следующим образом:
[WebMethod]
public void GetArticle(string userName, string password, string brand)
Клиент, который будет использовать веб-сервис, выполняет вызов метода через строки запроса, поэтому я получил бы:
http://localhost:5985/WebService?op=GetArticle&userName=ADMIN&password=ADMIN&brand=BRAND
И метод вернет некоторые данные правильно. Так как здесь нет проблем, но клиент должен иметь взамен другие данные, если он вызывает метод ТОЛЬКО с двумя первыми параметрами, например:
http://localhost:5985/WebService?op=GetArticle&userName=ADMIN&password=ADMIN
Можно подумать: ну, я пишу два разных метода, используя только те параметры, которые мне нужны, я выставляю их, и все готово. Я бы с этим согласился, но клиент (это не моё, это стороннее программное обеспечение) должен иметь ТОЛЬКО ОДИН метод для вызова, поэтому, если он хочет вернуть некоторые данные, он вызывает метод только с именем пользователя и паролем а если ему нужны какие-то другие данные, он вызывает GetArticle (имя пользователя, пароль, бренд).
Я читал о необязательных параметрах в WCF, и кажется, что нет никакого способа вызвать веб-метод без указания каждого параметра или иметь два метода с одинаковым именем и разными сигнатурами (перегрузка). Я уже пытался использовать атрибут MessageName
внутри тега [WebMethod]
, например:
[WebMethod (MessageName = "GetBrands")]
public void GetArticle(string userName, string password, string brand)
{
// Do stuff...
}
[WebMethod]
public void GetArticle(string userName, string password)
{
// Do other stuff...
}
Но я все еще должен вызывать эти методы, используя разные имена. Я также попытался опустить параметр, который не хочу отправлять, но получаю исключение.
Есть ли обходные пути для достижения этой цели? Я знаю, что перегрузка - это проблема, связанная с IIS, а не с WCF, но мне кажется странным отсутствие решения вообще ...
Заранее спасибо за помощь.