Ошибка IBM DB2 iSeries CWB_MP_TI_EVENT доступ запрещенC#

Место общения программистов C#
Ответить
Anonymous
 Ошибка IBM DB2 iSeries CWB_MP_TI_EVENT доступ запрещен

Сообщение Anonymous »

Я пытаюсь подключиться к базе данных DB2 на AS400, используя альфа-версию базовой библиотеки .NET, предоставляемой IBM, хотя мой проект написан на .NET 8.
Поскольку У меня есть несколько серверов для подключения, они где-то настроены, и строку подключения я создаю динамически с помощью кода:

Код: Выделить всё

    iDB2ConnectionStringBuilder builder = new()
{
DataSource = "[ServerAddress]",
UserID = "[User]",
Password = "[Password]",
PersistSecurityInfo = true
};
затем я использую builder.ConnectionString, чтобы открыть соединение.
Когда я выпустил этот код в производственной среде, я получаю следующая ошибка:

Код: Выделить всё

System.TypeInitializationException: The type initializer for 'Alfa.Data.DB2.iSeries.iDB2Trace' threw an exception.
---> System.UnauthorizedAccessException: Access to the path 'CWB_MP_TI_EVENT' is denied.
at System.Threading.EventWaitHandle.CreateEventCore(Boolean initialState, EventResetMode mode, String name, Boolean& createdNew)
at Alfa.Data.DB2.iSeries.iDB2NamedEvent..ctor(String eventName)
at Alfa.Data.DB2.iSeries.iDB2Trace..cctor()
--- End of inner exception stack trace ---
at Alfa.Data.DB2.iSeries.iDB2Trace.get_Tracing()
at Alfa.Data.DB2.iSeries.iDB2ConnectionStringBuilder..ctor()
Исключение генерируется конструктором iDB2NamedEvent, который вызывается iDB2Trace, который вызывается iDB2ConnectionStringBuilder, поэтому, очевидно, ни один из кода, который я используется для фактического открытия соединения.
Я провел реверс-инжиниринг dll и нашел код метода, в котором выдается исключение, а именно:

Код: Выделить всё

internal iDB2NamedEvent(string eventName)
{
SecurityPermission securityPermission = new SecurityPermission(SecurityPermissionFlag.UnmanagedCode);
waitHandle = null;
string identity = (new SecurityIdentifier(WellKnownSidType.WorldSid, null).Translate(typeof(NTAccount)) as NTAccount).ToString();
try
{
securityPermission.Assert();
EventWaitHandleSecurity eventWaitHandleSecurity = new EventWaitHandleSecurity();
EventWaitHandleAccessRule rule = new EventWaitHandleAccessRule(identity, EventWaitHandleRights.FullControl, AccessControlType.Allow);
eventWaitHandleSecurity.AddAccessRule(rule);
waitHandle = new EventWaitHandle(initialState: false, EventResetMode.ManualReset, "CWB_MP_TI_EVENT", out var _);
}
catch
{
CodeAccessPermission.RevertAssert();
throw;
}

CodeAccessPermission.RevertAssert();
}
Этот код выполняется как в службе Windows, так и в некоторой веб-службе ASP.NET в IIS. Теперь, чтобы это работало, мне нужно в обоих случаях установить пользователя, которого они запускают, в качестве локальной системы. Если я использую другого пользователя, я получаю сообщение об ошибке.
Я гуглил в течение 2 дней и не нашел ничего, что могло бы помочь, любые идеи будут оценены по достоинству.

Подробнее здесь: https://stackoverflow.com/questions/787 ... ess-denied
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»