Как установить minOccurs на 1

Я создаю веб-службу ASP.NET.

Мой код определен, как показано ниже, но я не могу понять, как в wsdl указать minOccurs для свойств FirstName и LastName. Я хочу их по мере необходимости, и они не могут быть пустыми. Является ли это возможным?

[WebMethod()]
public void TestMethod(TestClass Test)
{
    ...
}

[Serializable]
public class TestClass
{
    public string FirstName { get; set; }
    public string LastName { get; set; }    
}

person Jeremy    schedule 20.07.2009    source источник
comment
если вы наткнетесь здесь в надежде на обратное (minOccurs=0), см. social.msdn.microsoft.com/Forums/en-US/ - вы добавляете игнорируемое свойство [XmlIgnore]public bool {{TheProperty}}Specified { get; set; } и устанавливаете его, когда установлено 'TheProperty'.   -  person drzaus    schedule 05.11.2013


Ответы (3)


Я опубликовал подробный ответ в другом потоке с той же проблемой: Как сделать так, чтобы веб-сервис dotnet установил minOccurs = «1» для строкового значения.

Однако ответ для строк - нет.

Единственный способ сделать minOccurs = 1 без nullable = true - объявить свойство с без значения по умолчанию (строка имеет значение по умолчанию String.Empty) и без свойства, чтобы проверить, указано ли значение (создание идентичного имени свойства со словом «Указано», добавленным к его имени).

И вы все еще ограничены, если ответ Джона Сондерса верен.

Оказывается, WSDL не используется для проверки входящего XML. Не имеет значения, можете ли вы указать minOccurs - он не будет использоваться для проверки ввода.

person Rapps    schedule 06.06.2013

Оказывается, WSDL не используется для проверки входящего XML. Не имеет значения, можете ли вы указать minOccurs - он не будет использоваться для проверки ввода.

person John Saunders    schedule 20.07.2009
comment
Является ли это эмпирическим знанием или вы нашли какой-либо материал документации MSDN, подтверждающий этот факт? Я хочу узнать больше о WCF / WSDL / валидации, и это кажется очень интересным. - person D.R.; 17.12.2013
comment
В основном это эмпирические знания. Кроме того, есть статьи о том, как использовать расширение SOAP для проверки. Это означает, что никакая проверка не выполняется без использования расширения SOAP. Наконец, есть здравый смысл. Если проверка была выполнена, то должен быть способ ее отключить. Такого переключателя нет. - person John Saunders; 17.12.2013
comment
С SOAP-Extension вы имеете в виду написание MessageInspector, как показано на msdn.microsoft.com/ en-us / library / aa717047.aspx? - person D.R.; 17.12.2013
comment
Этот вопрос касался устаревших веб-служб ASMX, поэтому нет, я имел в виду класс, производный от SoapExtension. Да, для WCF вы должны использовать MessageInspector. - person John Saunders; 17.12.2013

Строки являются ссылочными типами, поэтому по определению допускают значение NULL. Если бы ваше свойство было целым числом, minoccurs было бы 1.

Вы можете заставить сериализатор не допускать, чтобы он был нулевым, поместив. [XmlElement ("name", IsNullable = false)]
над свойством.

Изменить: я имел в виду ссылочные типы, а не типы значений. Спасибо, Йорен!

person Zyphrax    schedule 20.07.2009
comment
Я не уверен, что это правильно. Я думаю, что IsNullable определяет, разрешен ли xsi: nil. Я не верю, что есть способ повлиять на minOccurs. - person John Saunders; 21.07.2009
comment
Строки не являются типами значений, а типы значений не допускают значения NULL (кроме случаев, когда они есть, как в int?). - person Joren; 20.11.2009