Необязательные параметры в веб-сервисе ASP.NET - PullRequest
9 голосов
/ 15 июня 2009

У меня есть веб-сервис ASP.NET. Этот веб-сервис работает нормально. Однако WSDL перечисляет некоторые параметры как необязательные (minoccurs = 0), а другие как необязательные. Некоторые из необязательных параметров на самом деле не являются необязательными, другие, которые помечены как необязательные, на самом деле являются необязательными. Я бы хотел это исправить, но не могу найти место, откуда поступает эта информация.

Мне кажется, что все примитивные типы (int, boolean и т. Д.) Не являются необязательными, а все остальные параметры помечаются как необязательные. Тем не менее, я не могу найти место, где я могу изменить это. Я хотел бы указать значения по умолчанию для примитивных значений, если они отсутствуют в запросе, и указать, какой не примитивный параметр на самом деле является необязательным. Где мне это сделать?

Ответы [ 2 ]

8 голосов
/ 15 июня 2009

Я предполагаю, что когда вы говорите веб-сервисы ASP.net, вы создаете веб-сервисы с расширением ASMX. Я думаю, что в этом случае происходит то, что все обнуляемые типы становятся необязательными, а не обнуляемые становятся не необязательными.

Возможно, вы могли бы вручную отредактировать сгенерированный файл WSDL. Но тогда вам придется повторить эту работу, если wsdl был восстановлен.

Я бы посоветовал вам переключиться на WCF с помощью baseHttpBinding (за исключением названия вашего сервиса, ваши клиенты не должны замечать разницу).

Используя WCF, вы можете просто пометить параметр в контракте данных как необходимый или нет:

[DataMember(IsRequired="false")]
6 голосов
/ 16 июня 2009

Примитивы не являются ссылочными типами, а скорее являются value типами. Вы можете сделать значение типа "обнуляемым" несколькими способами.

Сокращенная комбинация

int? i;

или длинная рука здесь

Nullable<int> i;
...