| 
 | 
| 
 
Как возвращать кастомные статус коды совместо с кастомными типами? 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  У меня есть такой сервис Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Хочу возвращать кастомные сообщения о состоянии сервиса типа таких Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Но хочу это делать примерно так (тип возврата - псевдокод) Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Логика на клиенте будет примерно такая: проверить ServiceStatus возвращаемого значения, и если он ServiceStatus.NormalWork, то делать что-то с остальной частью возвращаемого значения. Как лучше всего это организовать - возврат кастомных сообщений совместно с другими данными? Вообще, вопрос звучит более широко - как вообще возвращать из сервиса много разнотиповых данных за раз. Если бы можно было делать как в псевдокоде - возвращать (ServiceStatus, Settings) - то проблем бы не было. Но вернуть можно вроде как только одно значение. Надо для возврата городить некий базовый класс со свойством ServiceStatus и наследовать от него другие классы возврата для каждого OperationContract? Но ведь это какая-то глупость? ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 19.02.2016, 09:56 | 
  
  
  
   | 
||
| 
 
Как возвращать кастомные статус коды совместо с кастомными типами? 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  И похоже, что возвращать можно только одно значение - это ограничение не инфраструктуре WCF, а языка C# - в нём тоже у методов только одно возвращаемое значение, если не принимать во внимание всякие костыли типа ref и out. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 19.02.2016, 09:58 | 
  
  
  
   | 
||
| 
 
Как возвращать кастомные статус коды совместо с кастомными типами? 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Leo11Nardo, Domain объект. Tuple еще как вариант, но не советую ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 19.02.2016, 12:57 | 
  
  
  
   | 
||
| 
 
Как возвращать кастомные статус коды совместо с кастомными типами? 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Мне посоветовали две вещи. В одном случае предлагают сделать дженерик в дата контракте: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. и в контракте операции указать конкретный тип этого дженерика Код: c# 1. 2. А в другом случае предлагают все статусы через исключения возвращать. Я вот думаю, что исключения вроде как для ошибок предназначены - нормально ли через исключения сообщать клиентам о разных этапах НОРМАЛЬНОЙ работы службы? ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 19.02.2016, 19:18 | 
  
  
  
   | 
||
| 
 
Как возвращать кастомные статус коды совместо с кастомными типами? 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Т. е. наделать разных типов исключений на каждый статус и вызывать эти исключения при переключении статуса. У меня статус, например, DenialOfService больше говорит не о возникновении какой-то ошибки на стороне сервера, а о завершении конкретной работы и отказе в обслуживании, если будут повторные запросы по этой работе. Но работа завершилась нормально, без ошибок. Но есть и другие статусы, где вообще всё ОК и работа продолжается - тут-то причём исключения? Вообще, общаться исключениями - плохая ли практика? ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 19.02.2016, 19:22 | 
  
  
  
   | 
||
| 
 
Как возвращать кастомные статус коды совместо с кастомными типами? 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Leo11NardoВ одном случае предлагают сделать дженерик в дата контракте: Не рекомендуется использовать дженерики в WCF. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 19.02.2016, 19:29 | 
  
  
  
   | 
||
| 
 
Как возвращать кастомные статус коды совместо с кастомными типами? 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Leo11Nardo, Сколько людей - столько мнений. Если варианты собираешь, то вот еще один: Обращаешься сначала к одному методу, в зависимости от ответа - к другому за уточнением... Затем к третьему, если надо... и т.д. А так есть DTO, Агрегаты, и еще куча всего. Делай так, как нравится. Придумай что-то свое... Нет на твой вопрос однозначного ответа. В любом решении будут преимущества и недостатки... ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 19.02.2016, 20:23 | 
  
  
  
   | 
||
| 
 
Как возвращать кастомные статус коды совместо с кастомными типами? 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  AxeleronLeo11NardoВ одном случае предлагают сделать дженерик в дата контракте: Не рекомендуется использовать дженерики в WCF. Это где такое написано и почему? refregLeo11Nardo, Сколько людей - столько мнений. Если варианты собираешь, то вот еще один: Обращаешься сначала к одному методу, в зависимости от ответа - к другому за уточнением... Затем к третьему, если надо... и т.д. А так есть DTO, Агрегаты, и еще куча всего. Делай так, как нравится. Придумай что-то свое... Нет на твой вопрос однозначного ответа. В любом решении будут преимущества и недостатки... Это да. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 20.02.2016, 03:47 | 
  
  
  
   | 
||
| 
 
Как возвращать кастомные статус коды совместо с кастомными типами? 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  refregLeo11Nardo, Сколько людей - столько мнений. Если варианты собираешь, то вот еще один: Обращаешься сначала к одному методу, в зависимости от ответа - к другому за уточнением... Затем к третьему, если надо... и т.д. По-моему, это в посте, помеченном как ответ, вот здесь написано https://social.msdn.microsoft.com/Forums/vstudio/en-US/79585667-6b97-4ce4-93fa-3a4dcc7a9b86/wcf-and-generics?forum=wcf Или что-то подобное. И по-моему, это гораздо более монструозное и непонятное решение, чем "ограниченные дженерики". ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 20.02.2016, 03:50 | 
  
  
  
   | 
||
| 
 
Как возвращать кастомные статус коды совместо с кастомными типами? 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Ладно, попробую ограниченные дженерики для начала. Пока единственный "минус", что я слышал против них - "надо делать два типа проверок на стороне клиента - обработка исключений и обработка статус кодов". Вообще, это было не против дженериков, а против статус кодов. Так что против конкретно дженериков я пока ничего толком не услышал. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 20.02.2016, 03:57 | 
  
  
  
   | 
||
| 
 
Как возвращать кастомные статус коды совместо с кастомными типами? 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Все советы в небо... ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 20.02.2016, 16:22 | 
  
  
  
   | 
||
| 
 
Как возвращать кастомные статус коды совместо с кастомными типами? 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  AxeleronВсе советы в небо... Ну а какие аргументы против дженериков? И что за AxeleronDomain объект. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 20.02.2016, 17:19 | 
  
  
  
   | 
||
| 
 
Как возвращать кастомные статус коды совместо с кастомными типами? 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Также непонятно, что за refregDTO, Агрегаты в контексте заданного мной вопроса. В принципе, у меня и так DTO возвращается - вот хотя бы этот Leo11Nardocustom type Settings Это спецовский объект, который создаётся у меня из домееного объекта Settings. Т. е. я не сам доменный объект настроек передаю, а перевожу его в DTO с атрибутом DataContract. Ну и на клиенте он в клиентский объект настроек превращается - всё по слоям, как у взрослых. Только я не пойму, как мне это DTO или доменный объект поможет вернуть ещё и статусный код. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 20.02.2016, 17:25 | 
  
  
  
   | 
||
| 
 
Как возвращать кастомные статус коды совместо с кастомными типами? 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Leo11NardoЭто спецовский объект, который создаётся у меня из домееного объекта Settings. Т. е. я не сам доменный объект настроек передаю, а перевожу его в DTO с атрибутом DataContract. Ну и на клиенте он в клиентский объект настроек превращается - всё по слоям, как у взрослых. Только я не пойму, как мне это DTO или доменный объект поможет вернуть ещё и статусный код. Смотри на свой сервис глазами клиента - нужен ему статус - вставь статус в DTO. Какие проблемы? ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 21.02.2016, 12:18 | 
  
  
  
   | 
||
| 
 
Как возвращать кастомные статус коды совместо с кастомными типами? 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  refreg, Axeleron Да нет. Вы, наверное, не поняли меня. Ну помещю я код статуса в базовый DTO: Код: c# 1. 2. 3. 4. 5. 6. Но как потом вернуть что-то, помимо этого статуса, но вместе с ним? Придётся городить иерархию классов DTO на каждый тип: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Между тем, отвечая на акселероновское "Не рекомендуется использовать дженерики в WCF.". Где об этом написано. Вы бы хоть ссылку дали или своими словами сказали, что не там с дженериками. Потому что МСДН говорит, что с ними всё нормально: https://msdn.microsoft.com/en-us/library/ms733127(v=vs.110).aspx Код: c# 1. И далее там ещё пара слов по этому поводу. Может, вы когда-то давно с этим дело имели и тогда в WCF были проблемы с дженериками? Я сейчас .NET 4.5 использую и для этой версии в МСДНе нет против дженериков ничего. Просто надо на каждый тип Т тоже DataMember поставить и чтобы он сериализоваться мог, иначе при десериализации будут null-овые поля, как я понимаю. Это и есть та проблема, о которой Акселерон говорит? ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 29.02.2016, 16:34 | 
  
  
  
   | 
||
| 
 
Как возвращать кастомные статус коды совместо с кастомными типами? 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Скажите, чем  этот вариант  плох? ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 29.02.2016, 16:36 | 
  
  
  
   | 
||
| 
 
Как возвращать кастомные статус коды совместо с кастомными типами? 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Leo11Nardo, почитайте  здесь , например, если понимаете английский. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 29.02.2016, 16:48 | 
  
  
  
   | 
||
| 
 
Как возвращать кастомные статус коды совместо с кастомными типами? 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  AxeleronLeo11Nardo, почитайте  здесь , например, если понимаете английский. Т. е. если сравнивать два подхода: 1) по классу на возвращаемый сервисом тип, 2) "ограниченный дженерик" на возвращаемый сервисом тип, то они будут различаться вот чем: 1) на сервере объявляется один дженерик-класс, на клиенте - столько классов, сколько типов у параметра Т дженерика; 2) на сервере объявляется столько классов, сколько типов хочу возвратить, и на клиенте то же самое. Это первое отличие. Второе отличие. По сути, мне в любом случае придётся на клиенте держать логику разбора ответов сервиса по каждому типу отдельно. Только в случае 2) я могу воспользоваться базовым классов возврата и использовать KnownType, если надо. Т. е. вы против дженериков и за иерархию типов возврата с KnownType и разными резолверами ? ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 03.03.2016, 08:21 | 
  
  
  
   | 
||
| 
 | 

start [/forum/topic.php?fid=19&tid=1396793]:  | 
    0ms | 
get settings:  | 
    10ms | 
get forum list:  | 
    15ms | 
check forum access:  | 
    4ms | 
check topic access:  | 
    4ms | 
track hit:  | 
    46ms | 
get topic data:  | 
    11ms | 
get forum data:  | 
    3ms | 
get page messages:  | 
    49ms | 
get tp. blocked users:  | 
    1ms | 
| others: | 226ms | 
| total: | 369ms | 

| 0 / 0 | 

На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даете согласие с использованием данных технологий.