当前位置: 首页 > 编程语言 > C#

在Npgsql中无法一次接收多个通知分享

时间:2023-04-10 22:02:33 C#

在Npgsql中无法一次接收多个通知今天我为一个名为Npgsql的PostgreSQLC#库编写了以下代码:usingSystemusingSystem.Collections.Generic;使用System.Linq;使用系统文本;使用System.Threading.Tasks;使用Npgsql;namespacePostgreSQLNotificationsTest{classProgram{staticvoidMain(string[]args){using(varconn=newNpgsqlConnection("Server=127.0.0.1;Port=5432;UserId=postgres;Password=my_password;Database=helper_db.psql;SyncNotification=true")){conn.Notification+=OnNotification;conn.Open();使用(varcommand=newNpgsqlCommand("listennotifytest;",conn)){command.ExecuteNonQuery();}控制台.ReadLine();};}privatestaticvoidOnNotification(objectsender,NpgsqlNotificationEventArgse){Console.WriteLine("事件处理:"+e.AdditionalInformation);然后我执行以下操作createdb.exe-h127.0.0.1-p5432-Upostgres-Whelper_db.psqlpsql.exe-h127.0.0.1-p5432-Upostgres-Whelper_db.psqlcreatetablehelper(第一个文本主键,第二个整数);创建或替换函数nf()返回触发器作为$$开始执行pg_notify('notifytest',format('INSERT%s%s',NEW.first,NEW.second));返回空值;结尾;$$语言plpgsql;在插入、更新或删除帮助程序后为每个行执行过程nf()创建触发器any_after;Inserthelpervalues('first',10),('second',20);在C#项目中,我得到以下输出:事件处理:首先插入10没有“事件处理:插入第二个20”只有当我执行下一个操作(如“从助手中删除”)时,我才会收到它。为什么?除非您的客户端库支持检查网络套接字的缓冲数据,否则接收通知的唯一方法是触发套接字上的其他活动。许多应用程序定期发送空查询字符串("")来执行此操作。如果客户端库支持它并且您没有使用SSL,您可以定期在连接上调用某种checkForNotifications()函数。这在PgJDBC中是可能的,但我不知道nPgSQL,所以我只能建议你查看文档。更新(2015-02-27):这个bug已经在github的master分支修复。请注意,master分支是我们即将发布的3.0版本,可能存在一些我们正在处理的错误。请尝试一下,让我知道它是否适合您。这是Npgsql中的错误。我们正在做这件事。检查此拉取请求以获取更多信息:https://github.com/franciscojunior/Npgsql2/pull/46在特殊提交中:https://github.com/glenebob/Npgsql2/commit/98fd469048a20119755777ce3a8ffc4397f4a114但我们正在尝试另一种方法解决这个问题。请注意,只有在短时间内发送多个通知时才会出现此问题。如果您在通知之间留出1或2秒的间隔,它们将被正确传送。一旦我们解决了这个问题,我会在这里更新我的答案。对于此问题可能造成的不便,我们深表歉意。以上是C#学习教程:Npgsql无法立即收到多条通知分享所有内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注。本文来自网络收藏,不代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: