【问题标题】:Invoke c# Windows service from Oracle AFTER INSERT Trigger从 Oracle AFTER INSERT 触发器调用 c# Windows 服务
【发布时间】:2017-08-09 22:59:13
【问题描述】:

我们如何invoke c# windows service(或)dll 来自 Oracle AFTER INSERT Trigger 的文件

任何建议都将受到高度赞赏

最好的问候,

【问题讨论】:

标签: c# oracle


【解决方案1】:

作为一项规则,Windows 服务并非旨在根据特定请求调用,它应该在后台连续运行。

为了让 Oracle DB 执行某些操作,您首先需要在表上使用一个触发器来监控插入。

那么,这应该调用一个java存储过程。然后,此存储过程可以在消息总线上发送消息,您的服务可以接收并处理该消息。

见:
Sending a JMS Message from Oracle Database on DML Event

Oracle: Java stored procedure sending JMS Message

https://docs.oracle.com/cd/B19306_01/server.102/b14257/jm_point.htm

另一种方法是让java存储过程调用外部程序

【讨论】:

  • 我需要当我的 oracle 数据库表发生更改时触发器应该从 c# 窗口服务触发邮件
  • 触发器不是这样工作的。当数据库表上发生某些事情时触发触发器,它只存在于数据库中。使用我上面建议的过程让您的 Windows 服务执行您需要做的任何事情,这可能是将消息/事件发送到另一个程序。
  • 当我的数据库表插入或更新一行时,如何在 oracle 触发器中调用 c# 窗口服务
  • 是的,这就是我的数据库表记录发生更改或插入然后触发器从 c# 窗口服务触发的邮件
  • 有可能吗?
【解决方案2】:

我通过使用utl_http 使Oracle 触发器调用WebApi 服务解决了这个问题。这样,“服务”可以等待请求并且触发器是轻触的。这是我的触发器示例:

declare 
  content varchar2(4000);
  req utl_http.req;
  res utl_http.resp;
  url varchar2(4000) := 'http://server.com/api/Function';
begin

  content := '{ "Message": "Hello" }';
  req := utl_http.begin_request(url, 'POST',' HTTP/1.1');
  utl_http.set_header(req, 'user-agent', 'mozilla/4.0'); 
  utl_http.set_header(req, 'content-type', 'application/json'); 
  utl_http.set_header(req, 'Content-Length', length(content));

  utl_http.write_text(req, content);
  res := utl_http.get_response(req);
  if res.status_code <> 200 then
    dbms_output.put_line(res.reason_phrase);
  end if;
  utl_http.end_response(res);
end;

您可以将任何您想要的逻辑放入 WebApi 端点。如果你真的想要一个 Windows 服务,你可以让触发器写入 RabbitMQ 之类的东西,并让服务消耗交换队列。

【讨论】:

  • 好的,但是如何为调用 c# 窗口服务创建一个 oracle 触发器?当我的数据库记录更改或在表中插入新行时自动触发邮件............
  • 上面的代码将在发生更改或插入时触发(只要它被创建为触发器),它会向列出的 URL 发送一条消息 - 该服务可以轻松地向您发送一封邮件需要用您想要发送的任何内容填充内容,并启用端点。
  • @Dominic......上面的代码你提供给我的代码如何在oracle触发器和服务中使用
  • 不确定我是否理解您的评论,我在回答您的原始问题时解释了一个建议 - 我的是使用上面的代码从触发器调用 WebApi 服务 - 我不确定我需要发布 WebApi 端点的示例?祝你的解决方案好运
  • 我可以在这里使用我的 WEBSERVICE URL url varchar2(4000) := 'http://server.com/api/Function';
猜你喜欢
  • 1970-01-01
  • 2013-03-29
  • 1970-01-01
  • 2017-10-04
  • 1970-01-01
  • 2020-12-23
  • 2012-08-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多