powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Передача исключения в клиентское приложение на С#
5 сообщений из 5, страница 1 из 1
Передача исключения в клиентское приложение на С#
    #36998091
kaelthas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!

Интересует следующий вопрос: существует ли возможность передать сгенерированное в Cache пользовательское исключение клиентскому приложению, написанному на C#?

Например, в методе на серверной стороне создаем исключение:

Код: plaintext
1.
2.
3.
4.
5.
6.
Method getCurrentState(oid As %String) As State
{
    set adbException = ##class(ADB.Exceptions.GetStateException).%New()
    set adbException.Name = "Сообщение об ошибке"
    set adbException.Code =  1 
    throw adbException
}

В клиентском приложении вызываем метод:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
CacheConnection conn = new CacheConnection();
 conn.ConnectionString =
  "Server=localhost; Port=1972; Namespace=USER;"
   + "Password=******; User ID=_SYSTEM;";
            
   conn.Open();
   try
   {
       ADB.Object obj = ADB.Object.OpenId(conn, "6");
       ADB.State st = obj.getCurrentState("2");
   }
   catch (Exception e)
   {
      
       Console.WriteLine(e.Message); //здесь печатается
                                                 //<NOCATCH>zgetCurrentState+ 39 ^ADB.Object. 2 
   }

При выполнении данного кода возникает исключение с сообщением <NOCATCH>zgetCurrentState+39^ADB.Object.2. Желательно, чтобы сюда возвращалось сформированное на стороне сервера сообщение об ошибке. Есть ли в Cache такая возможность или придется вместо использования исключений возвращать код выполнения операции (%Status)?
...
Рейтинг: 0 / 0
Передача исключения в клиентское приложение на С#
    #37001149
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В настоящий момент пока следует использовать %Status, так как исключения вне блока CATCH генерируют ошибку <NOCATCH>:
Status Exceptions and User-Defined Exceptions

Это касается не только dotNET. Попробуйте вызвать методы Test1 и Test2 из терминала:

Class sqlru.test Extends %Persistent
{

ClassMethod Test1()
{
  $$$ThrowStatus($$$ERROR($$$GeneralError,"Текст исключения"))
}

ClassMethod Test2() As %Status
{
  #dim ex As %Exception.AbstractException
  set sc=$$$OK
  try{
    do ##class(sqlru.test).Test1()
  }catch ex{
    set sc=ex.AsStatus()
  }
  q sc
}
}

Из .NET потом достаточно легко сгенерировать исключение:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
using (var cn = new CacheConnection("..."))
{
  cn.Open();
  try
  {
    var sc = sqlru.test.Test2(cn);
    if (!sc.IsOK) sc.ThrowException();

    MessageBox.Show(@"OK");

  }catch (Exception ex)
  {
    MessageBox.Show(ex.Message);
  }
}

PS: в InterSystems работают над улучшением обработки ошибок с помощью исключений: Error Handling: Try....Catch
...
Рейтинг: 0 / 0
Передача исключения в клиентское приложение на С#
    #37001368
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servitPS: в InterSystems работают над улучшением обработки ошибок с помощью исключенийЭто вроде бы немного не про то: здесь речь идёт об изменении приоритета Try....Catch и $etrap.
...
Рейтинг: 0 / 0
Передача исключения в клиентское приложение на С#
    #37002915
kaelthas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
servit, большое спасибо за ответ! Надеюсь, возможность непосредственной передачи исключения клиентскому приложению появится в будущих версиях Cache'.
...
Рейтинг: 0 / 0
Передача исключения в клиентское приложение на С#
    #37003023
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kaelthasservit, большое спасибо за ответ! Надеюсь, возможность непосредственной передачи исключения клиентскому приложению появится в будущих версиях Cache'.
Если у Вас есть доступ к WRC , то лучше завести соответствующий запрос на расширение функциональности.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Передача исключения в клиентское приложение на С#
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]