WebMethod вызывается с параметрами или без них - PullRequest
0 голосов
/ 04 июня 2019

я пытаюсь настроить веб-службу 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, но мне кажется странным отсутствие решения вообще ...

Заранее спасибо за помощь.

1 Ответ

0 голосов
/ 04 июня 2019

Передача учетных данных в HTTP-запросе GET, как вы описали, является ужасной идеей, она невероятно небезопасна и ее следует избегать.

В любом случае, чтобы делать то, что вы хотите, вы не можете использовать необязательные параметры, WebMethod нужна особая подпись ... Поэтому вам нужно использовать параметры по умолчанию ... т.е. public void GetArticle(string userName, string password, string brand="")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...