Bonjour

J'essaie de utiliser un oracle dependency pour notifier tout changement d'une table dans un application C# .net 4.5 provenant d'un serveur sur mon reseau local.
La base oracle et la free edition 11g (v 11.2.0.2.0) et le client oracle.data.access est v 11.2.0 en version 4.112.3.0.
J'ai bien donne les droit mon user pour les notifications.

Je crée la connexion et l'objet oracle dependency par le code suivant.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
con = new OracleConnection(constr);
            try
            {
 
                con.Open();
                if (con.State == ConnectionState.Open)
              {
                    OracleCommand cmd = con.CreateCommand();
                    cmd.CommandText = "Select *FROM DEMO_CUSTOMERS";
                    OracleDependency.Port = 1005;
                    dependency = new OracleDependency();
                    dependency.OnChange += new OnChangeEventHandler(dependency_OnChange);
                    dependency.AddCommandDependency(cmd);
                    cmd.Notification.IsNotifiedOnce = false;
                    cmd.AddRowid = true;
                    cmd.ExecuteNonQuery();
 
                }
            }
            catch (Exception exp)
            {
                MessageBox.Show(exp.InnerException.ToString());
                throw;
            }
 
 void dependency_OnChange(object sender, OracleNotificationEventArgs eventArgs)
        {
            try
            {
 
                MessageBox.Show("Table has been Changed");
                MessageBox.Show(eventArgs.Source.ToString());
                MessageBox.Show(eventArgs.Info.ToString());
                MessageBox.Show(eventArgs.Source.ToString());
                MessageBox.Show(eventArgs.Type.ToString());
                DataTable dt = eventArgs.Details;
 
 
            }
            catch (Exception exception)
            {
                MessageBox.Show(exception.InnerException.ToString());
            }
        }
En regardant la base oracle dans la table USER_CHANGE_NOTIFICATION_REGS la notification est bien enregistrée.
J'ai enlevé mon firewall et j’écoute le port TCP 1005 avec wireshark. En modifiant la table sur le server dans SQL server j'ai bien un flux
TCP qui vient au commit sur mon PC mais l’événement OnChange n'est jamais déclenché.

Ou peut être mon erreur?

Cordialement