C# 每隔X小时从PostgreSql函数调用Web服务(asmx)
我在PostgreSql中有一个函数:C# 每隔X小时从PostgreSql函数调用Web服务(asmx),c#,web-services,postgresql,asmx,postgresql-9.3,C#,Web Services,Postgresql,Asmx,Postgresql 9.3,我在PostgreSql中有一个函数: do $$ declare arow record; foo varchar(50); begin for arow in select name from person s(a) loop foo := arow.name; RAISE NOTICE 'Calling asmx(%)', foo; end loop; end; $$; 我想在我打印通知的那一行调用一
do $$
declare
arow record;
foo varchar(50);
begin
for arow in
select name from person s(a)
loop
foo := arow.name;
RAISE NOTICE 'Calling asmx(%)', foo;
end loop;
end;
$$;
我想在我打印通知的那一行调用一个用C#制作的Web服务(asmx)
可能吗?如果没有,有什么建议吗?虽然可以从长时间运行的函数中执行此操作,但出于许多原因,这是一个糟糕的想法
相反,您应该在一个频道上NOTIFY
,然后让LISTEN
ing客户端守护程序接收通知并调用web服务
这本质上是一个相同的问题,就像:
- 它浪费了一个完美的DB连接——当web服务调用发生时,DB进程不能做任何有用的事情
- 如果web服务调用被卡住,您可能会遇到大量卡住的DB连接,从而导致严重的性能问题、连接池不足等
收听
和通知
。这就是他们在那里的目的
Re“每隔几个小时”一次:不要试图用DB函数来实现这一点。由于函数长时间运行的事务导致不可移动的行版本,这将导致性能问题。使用任务调度器/cron/pgagent/ 大多数情况下,从数据库函数调用web服务都会导致性能问题,但我将照此处理。使用像plperl或plpython这样的语言,您可以调用任何东西。找出如何从命令行调用您的web服务,并使用perl或pythons库中的一个来进行系统调用。使用web服务调用,只有在给定问题中的信息时,您才能找到答案。如果您真的想沿着这条路走下去,或者您只是想看看是否有可能读取不受信任的plperl()