繁体   English   中英

C#Web服务在返回响应后执行某些操作

[英]C# web service do something after return response

我有一个名为S的网络服务

我的客户有一个名为C的Web服务。

  • 我的客户向我的Web服务( Web服务S )发送请求
  • Web服务S将向客户端( C )发送响应
  • 之后,我的服务( S )将创建1条发票消息并将其发送到客户端Web服务( C
  • 客户端Web服务返回到我的Web服务的结果( S

如何执行呢?

在此处输入图片说明

据我了解,您想将响应返回给客户端应用,但仍要继续进行一些处理。 这里有几种可能性:

  1. 在2.中启动一个新线程 ,该线程将创建发票并将其发送到客户端WS。 但是,这可能容易出错-在创建发票的过程中,您的Web服务可能会死机或关闭,并且客户端WS永远不会知道。
  2. 使用诸如hangfire之类的方法来计划发票的创建。 Hangfire将计划的任务存储在数据库中,因此即使发生故障也将最终执行该任务。 除了设置后端数据库外,不需要其他配置。 处理过程与服务的托管过程相同。
  3. 使用ServiceBusMSMQ -这个想法是simmilar与迟发型-你发送消息(说像“创建参数X发票”)的总线,总线确保消息被分发给任何人监听了。 然后,您将注册一个处理此类消息的侦听器并创建发票。 这将需要更多的工作,因为您必须选择Service Bus引擎 ,花点时间来了解它,安装,配置等。

对于域事件,这是一个很好的案例。 我不知道第一个请求是什么-也许下订单了? 下订单后,您将引发一个事件,指示已下订单。 该事件可能包含有关订单的某些信息,也可以包含可用来检索它的参考(id)。 然后其他听众将做出相应的响应。

好处之一是,它可以使应用程序的不同部分分离。 例如,提交订单的类不需要知道会有发票。 它只是引发一个事件,指示已下订单,然后继续进行。

如果您要在下订单时有多种行为,那将变得更加重要。 也许您还想发送一封电子邮件,确认您已收到订单。 现在,您可以将其他行为添加为事件侦听器,而无需修改下订单的代码。

此外,您的应用程序可能会增长,因此可能还有另一项用于下订单的服务。 (尽管我不知道具体事件是什么,但我正在执行“下订单”。)您不希望应用程序中的多个点遵循所有后排序步骤。 如果这些步骤改变了,那么您将不得不在所有这些地方修改代码。 相反,您只是引发事件。

这是一篇很受欢迎的文章 ,很好地描述了这个概念。 事件总线有多种实现。 这是一个

在伪代码中,您现在可以有几个事件处理程序,每个事件处理程序都与您的订购代码完全分离。

提交订单后立即引发事件本身。

var order = SubmitOrder(info); 
eventBus.Raise(new OrderSubmitEvent(order));

然后,您将注册一些事件处理程序以响应该事件。

public class SendInvoiceOrderEventHandler : IEventHandler<OrderSubmitEVent>
{
    public void HandleEvent(OrderSubmitEvent e)
    {
        //e contains details about the order. Send an invoice request
    }
}

public class SendConfirmationOrderEventHandler : IEventHandler<OrderSubmitEVent>
{
    public void HandleEvent(OrderSubmitEvent e)
    {
        //send an email confirmation
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM