Я создал фиктивный веб-сервис с 2 необязательными параметрами, используя .Net Webservices, однако в реальном продукте у нас будет намного больше необязательных параметров (например, фильтры для запроса). Проблема заключается в том, что при вызове веб-службы невозможно не указывать необязательные параметры, т. Е. При каждом вызове веб-службы могут возникать десятки значений NULL при разработке против реального веб-сервиса.
Прямо сейчас этот фиктивный веб-сервис состоит только из этого, чтобы поддерживать 2 необязательных строковых параметра:
[WebMethod]
public string HelloWorld(String PARAM_1="", String PARAM_2="")
{ return ""; }
В WSDL действительно отображаются эти параметры с минимальным значением 0 и максимальным значением 1:
<s:element minOccurs="0" maxOccurs="1" name="PARAM_1" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="PARAM_2" type="s:string"/>
Проблема заключается в следующем: при добавлении этого веб-сервиса через веб-ссылку в Visual Studio 2010 он действительно создает объект службы с помощью метода HelloWorld. Однако это не учитывает необязательные параметры. Он создает функцию HelloWorld без дополнительных параметров. Это всегда требует и PARAM_1, и PARAM_2, поэтому необязательные параметры должны быть заполнены значениями NULL независимо от того, какие из них мы на самом деле хотели бы использовать.
Определение VS2010 генерируется из веб-ссылки так, показывая проблему:
public string HelloWorld(string PARAM_1, string PARAM_2) {
object[] results = this.Invoke("HelloWorld", new object[] { PARAM_1, PARAM_2});
Есть ли способ использовать веб-сервисы с дополнительными параметрами в VS2010, не принуждая обнулять потенциальные десятки дополнительных параметров при каждом вызове? Мы хотели бы продолжать использовать удобные веб-ссылки в Visual Studio без необходимости делать это постоянно.