|
Как возвращать кастомные статус коды совместо с кастомными типами?
|
|||
---|---|---|---|
#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&msg=39175735&tid=1396793]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
61ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 171ms |
0 / 0 |