powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Перестал работать Notification (Oracle)
4 сообщений из 4, страница 1 из 1
Перестал работать Notification (Oracle)
    #36697797
Фотография stells2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени :)
Не пойму в чем дело, в пятницу работало всё, сегодня перестало обновляться.
В общем есть АРМ который следит за некоторыми таблицами в БД Orace и по приходу сообщения обновляет данные на форме.
Пример кода

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
using Oracle.DataAccess.Client;
using System.Data;
using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace armds
{
     public partial class Notification_class
    {
        //Библиотеки для посылки сообщений системе
        [DllImport("user32.dll", SetLastError = true)]
        static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
        [DllImport("user32.dll")]
        public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
        [DllImport("User32.dll")]
        extern static int PostMessage(IntPtr hWnd, UInt32 msg, Int32 wParam, Int32 lParam);

        OracleConnection con;
        OracleCommand cmd;
        OracleDependency dep = null;
        string[] dsName = { "L2.HEAT_STEPS", "L2.HEATS", "L2.CHEM_ANL", "L2.MNLZ_HEAT", "L2.MNLZ_BL", "L2.VKM_HEAT", "ADM.CREW_TMP" };
        
         public Notification_class()
         {
             con = new OracleConnection("DATA SOURCE=CIS;PASSWORD=user;PERSIST SECURITY INFO=True;USER ID=user");
             con.Open();
             cmd = con.CreateCommand();
             dep = new OracleDependency(cmd);
             cmd.Notification.IsNotifiedOnce = false;
             cmd.AddRowid = true;
             

         }
         public bool IsNotifEnabled
         {
             get { return dep.IsEnabled; }
         }
         public void run()
         {
             InitRegistrNotif(OraNotification);
         }
         private void InitRegistrNotif(OnChangeEventHandler value)
        {
                //if (dep.RegisteredResources.Count > 0) return;
                try
                {
                    cmd.CommandType = CommandType.Text;

                    if (con.State != ConnectionState.Open)
                        con.Open();
                    dep.OnChange += value;
                    dep.QueryBasedNotification = true;
                    foreach(string s in dsName)
                    {
                        cmd.CommandText = String.Format("SELECT * FROM {0} WHERE ROWNUM < 1",s);
                        cmd.ExecuteNonQuery();
                    }
                    if(con.State == ConnectionState.Open)
                        con.Close();
                  
                }
                catch ( Exception e )
                {
                    MessageBox.Show( e.Message );
                }
        }
        // ~Notification_class()
        //{
        //    try
        //    {
        //        if (con.State == ConnectionState.Open)
        //        {
        //            //if (dep.IsEnabled)
        //            //    dep.RemoveRegistration(con);
        //            con.Close();
        //        }
        //        con.Dispose();

        //    }
        //    catch ( Exception e )
        //    {
        //          MessageBox.Show(String.Format("~Notification_class(): {0}", e.Message) );
        //    }
        //}
         public void OraNotification(Object src, Oracle.DataAccess.Client.OracleNotificationEventArgs arg)
         {
             if (arg.Source == Oracle.DataAccess.Client.OracleNotificationSource.Data)
             {
                 if (arg.Type == Oracle.DataAccess.Client.OracleNotificationType.Change)
                 {
                     try
                     {
                         foreach (String s in arg.ResourceNames)
                         {
                             switch (s)
                             {
                                 case "L2.HEAT_STEPS":
                                     {
                                         PostMessage(FindWindow(null, "Notification"), 5670, 1, 0);
                                         //Change_DSP = true;
                                     }
                                     break;
                                 case "L2.MNLZ_HEAT":
                                     {
                                         PostMessage(FindWindow(null, "Notification"), 5670, 2, 0);
                                         //Change_UNRS = true;
                                     }
                                     break;
                                 case "L2.CHEM_ANL":
                                     {
                                         PostMessage(FindWindow(null, "Notification"), 5670, 3, 0);
                                         //Change_ANL = true;
                                     }
                                     break;
                                 case "L2.MNLZ_BL":
                                     {
                                         PostMessage(FindWindow(null, "Notification"), 5670, 4, 0);
                                         //Change_BL = true;
                                     }
                                     break;
                                 case "L2.VKM_HEAT":
                                     {
                                         PostMessage(FindWindow(null, "Notification"), 5670, 5, 0);
                                         //Change_UVS = true;
                                     }
                                     break;
                             }
                         }
                     }
                     catch (Exception e)
                     {
                         MessageBox.Show("Ошибка " + e);
                     }
                 }

             }
         }
    }
}

На других машинах работает (есть тестовое, простое приложение, цель которого тест именно Notification). Это уже вторая машина которая не отслеживает.
На ней в общем то есть коннект к Oracle, MS SQL и OPC протокол..
Ничего не могу понять, как будто тупо порты не отрабатывают. Хотя, запускаю приложение написанное в Delphi и использующее те-же механизмы – работает нормально.

Подскажите, куда копать?
VS 2010 .NET 3.5 клиент 11.1
...
Рейтинг: 0 / 0
Перестал работать Notification (Oracle)
    #36697887
Фотография stells2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пока не уверен до конца, но вроде найден косяк - отключил интерфейсы виртуалки, всё заработало... Кто бы подумал..
Поглядим...:)
...
Рейтинг: 0 / 0
Перестал работать Notification (Oracle)
    #36699577
Фотография stells2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
блин, бред. Конечно VS 2008 совсем попутал :)
...
Рейтинг: 0 / 0
Перестал работать Notification (Oracle)
    #37078676
Фотография stells2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так никто и не подскажет?
Отваливается Notification а по какой причине - непонятно :((
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Перестал работать Notification (Oracle)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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