Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Перестал работать Notification (Oracle) / 4 сообщений из 4, страница 1 из 1
21.06.2010, 10:40
    #36697797
stells2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестал работать Notification (Oracle)
Доброго времени :)
Не пойму в чем дело, в пятницу работало всё, сегодня перестало обновляться.
В общем есть АРМ который следит за некоторыми таблицами в БД 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
21.06.2010, 11:17
    #36697887
stells2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестал работать Notification (Oracle)
Пока не уверен до конца, но вроде найден косяк - отключил интерфейсы виртуалки, всё заработало... Кто бы подумал..
Поглядим...:)
...
Рейтинг: 0 / 0
22.06.2010, 06:26
    #36699577
stells2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестал работать Notification (Oracle)
блин, бред. Конечно VS 2008 совсем попутал :)
...
Рейтинг: 0 / 0
26.01.2011, 06:18
    #37078676
stells2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестал работать Notification (Oracle)
так никто и не подскажет?
Отваливается Notification а по какой причине - непонятно :((
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Перестал работать Notification (Oracle) / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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