2014-05-13 3 views
0

У меня есть класс, который инициализирует свои свойства в своем конструкторе.Как установить начальные значения для свойств класса, открытого через 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) 
    { 
     ... 
    } 

До клиенты звоните в веб-сервиса, объект Критерии построен и настроен. Но, поскольку он открыт через веб-сервис, конструктор фактически не вызывается, и клиент не всегда правильно устанавливает все требуемые значения.

Учитывая, что у нас ограниченный контроль над кодом клиента, Какова наилучшая стратегия для обеспечения того, чтобы были установлены соответствующие начальные значения?

+0

Это было в то время как я использовал эти основные веб-сервисы, но IIRC, это не конструктор без параметров, который вызывается перед десериализацией? Независимо от того, вместо того, чтобы устанавливать их в конструкторе, ваши свойства могут иметь поля поддержки с их начальными значениями, установленными там в объявлении поля. EDIT: Но если верно, что конструктор по умолчанию _is_ работает, то, возможно, вам нужно дважды проверить отправленные данные: возможно, вы не отправляете правильную информацию. –

+0

ASMX - устаревшая технология и не должна использоваться для новой разработки. WCF или ASP.NET Web API должны использоваться для всех новых разработок клиентов и серверов веб-сервисов. Один из намеков: Microsoft отстранила [ASMX Forum] (http://social.msdn.microsoft.com/Forums/en-US/asmxandxml/threads) в MSDN. –

+0

Клиент будет отвечать за правильную инициализацию объекта. Если у клиента нет достаточных знаний для этого, вам нужно будет пересмотреть свой подход/перепроектировать ваше приложение. – Tim

ответ

1

Вы никак не можете контролировать клиента. Класс «Сервис» на клиенте никоим образом не связан с классом службы, который содержит конструктор. Это просто «прокси», а не реальная.

0

Возможно, вы можете использовать поля nullable, чтобы вы знали, что клиент не установил никаких значений в полях.

+0

-1: Вы когда-нибудь пытались использовать тип значения NULL в службе ASMX? А что, если клиент установил значение null? –

+1

Нет. У меня нет того, почему я говорю, может быть, «null» может быть равно NOT, если только «null» не является значением. Что еще НЕ ясно – sallushan

+0

@John, я тестировал в ASMX и отлично работал BTW. – sallushan

0

Не используйте авто Реализуемый свойства в классе, но вместо того, чтобы использовать старые ручные свойства с бэк-полями, которые мощь быть инициализированы по умолчанию без вызова конструктора:

public class Criteria 
{ 
    private int _maxResults = 100; 

    //----------------------------------------------------------------------- 

    public int MaxResults 
    { 
    get{ return _maxResult; } 
    set{ _maxResults = value; } 
    } 

} 
+0

Я проверил это, он НЕ инициализирован до 100, значение равно 0. – sallushan

Смежные вопросы