从ASP.NET与WCF服务进行通信是否安全

时间:2016-12-31 03:56:55

标签: asp.net wcf

我需要与ASP.NET进行通信(以双工方式)。将Windows服务转换为WCF服务并组织双向通信是否安全?

我担心服务尝试通信但是ASP.NET进程正在重新加载并且消息丢失的情况。虽然在开发过程中不太可能,但我想很可能在很多客户的制作中。

我倾向于寻求一种涉及某种持久性的解决方案:

  1. Windows服务和ASP.NET都将数据写入SQL Server并通过SqlDependency

  2. 获得通知
  3. 他们通过RabbitMq交换消息

1 个答案:

答案 0 :(得分:1)

以下是关于两个独立系统(流程,服务器等)需要可靠通信的一般情况的一些想法:

  1. 交易模型,其中发送方在将消息标记为已发送之前发起通信并等待来自接收方的确认。在传输失败/超时的情况下,发送者有责任保留消息并稍后重试。例如,Webhook架构依赖于此模型。

  2. 发布/订阅模型,由许多分布式系统使用,其中双方都依赖于第三方消息代理(消息队列/服务总线机制),例如RabbitMQ。在此体系结构中,发件人仅负责确保邮件已成功排队。确保邮件已传递给收件人的责任在邮件代理上。在这种情况下,您需要确保消息代理满足您的可靠性需求,例如:它仅在内存中吗?或者它是否仍然存在于磁盘中,并且不仅可以从流程回收中恢复,还可以从电源/系统回收中恢复。

  3. 就像你说的那样,你也可以构建自己的消息传递基础架构:发送者写入本地或云数据库或云队列/服务总线,接收者轮询和使用消息。

    所以,有一些指导原则:

    1. 如果您需要扩展(拥有多台服务器)并且需要以某种方式协作处理这些消息,那么就可以对数据库或云队列解决方案(例如Azure SQL或Azure队列)进行初始投资。

    2. 否则,如果您的服务只需要在一台服务器内通信,那么您可以使用数据库方法或使用满足持久性/可靠性要求的队列服务。 RabbitMQ似乎是这种情况的强大解决方案。