У меня есть класс, который инициализирует свои свойства в своем конструкторе.Как установить начальные значения для свойств класса, открытого через webservice
public class Criteria
{
public bool Chapter1 { get; set; }
public bool Chapter2 { get; set; }
...
public uint MaxResults { get; set; }
public int Hits { get; set; }
public Criteria()
{
Chapter1 = false;
Chapter2 = false;
...
MaxResults = 100;
Hits = -1;
}
}
Этот класс используется внутри веб-службы для настройки поиска в БД. Когда я создаю класс внутри, выполняется правильная инициализация, и операция выполняется так, как ожидалось.
Однако класс также подвергается в качестве параметра в методе для этого веб-службы:
[WebMethod]
public List<xxx> GetxxxCollection(string requestingUserName, Criteria sc)
{
...
}
До клиенты звоните в веб-сервиса, объект Критерии построен и настроен. Но, поскольку он открыт через веб-сервис, конструктор фактически не вызывается, и клиент не всегда правильно устанавливает все требуемые значения.
Учитывая, что у нас ограниченный контроль над кодом клиента, Какова наилучшая стратегия для обеспечения того, чтобы были установлены соответствующие начальные значения?
Это было в то время как я использовал эти основные веб-сервисы, но IIRC, это не конструктор без параметров, который вызывается перед десериализацией? Независимо от того, вместо того, чтобы устанавливать их в конструкторе, ваши свойства могут иметь поля поддержки с их начальными значениями, установленными там в объявлении поля. EDIT: Но если верно, что конструктор по умолчанию _is_ работает, то, возможно, вам нужно дважды проверить отправленные данные: возможно, вы не отправляете правильную информацию. –
ASMX - устаревшая технология и не должна использоваться для новой разработки. WCF или ASP.NET Web API должны использоваться для всех новых разработок клиентов и серверов веб-сервисов. Один из намеков: Microsoft отстранила [ASMX Forum] (http://social.msdn.microsoft.com/Forums/en-US/asmxandxml/threads) в MSDN. –
Клиент будет отвечать за правильную инициализацию объекта. Если у клиента нет достаточных знаний для этого, вам нужно будет пересмотреть свой подход/перепроектировать ваше приложение. – Tim