Наиболее эффективный способ записи параметров вызова для метода в случае исключения
Разработка на C#: я вызываю веб-сервис / другие методы в блоке try catch с различными параметрами, некоторые из которых могут быть пользовательскими объектами. Пожалуйста, прокомментируйте лучший способ записи параметров в текстовый файл в случае исключения. Также возможно пропустить некоторые поля из объекта (например, если объект содержит файл изображения, который я не хочу записывать в текстовый файл)
Спасибо за ваше время
3 ответа
Я предлагаю вам заглянуть в PostSharp. Вы можете использовать атрибуты, чтобы объявить, что вы хотите, чтобы определенный код выполнялся "вокруг" обычного метода. Этот код может использовать аргументы метода и может быть зарегистрирован, только если исходный код вызвал исключение и т. Д.
Этот вид сквозной заботы - именно то, для чего предназначен АОП. Я не знаю, насколько хорошо PostSharp работает с веб-сервисами, но я не могу представить, что вы первый человек, который хочет этого.
Вы сможете добавить свойства в свой атрибут, чтобы указать любые аргументы, которые будут пропущены и т. Д.
Вы можете дать вашим объектам метод to_string, который отображает их так, как вы хотите. Если вы хотите быть умным, вы можете даже попросить их дать свои полные данные в первый раз, а затем обратиться к полной версии в более поздних случаях (чтобы ваш журнал не становился неразборчивым).
Если у них нет хорошего имени для использования в качестве ссылки, вы можете просто назначить им что-нибудь (скажем, "AxilWidget #7" или "PendingWhackQueue #14").
Это может сделать журнал намного проще для чтения во многих случаях, и это очень важно, если вы собираетесь рекурсивно сериализовать структуру объекта с помощью циклов. Вы должны будете проявить особую осторожность, если объекты могут значительно измениться между отчетами - скажем, всегда включать сводку, содержащую этих членов, даже в обратной ссылке.
Короткий ответ: вы не можете, не пройдя через обручи.
Когда вы получаете исключение, оно содержит информацию трассировки стека, но эта информация не содержит ничего относительно параметров, которые были переданы методу в то время.
Чтобы обойти это, вы должны сохранить параметры в своем коде обработчика исключений, чтобы иметь доступ к ним при обработке исключения.
Например, у вас будет объект, которому вы передадите экземпляры параметров (вместе с их именами), а затем вызовете метод для этого объекта в блоке catch.