Web services Web服务中的超时和错误处理-体系结构方法

Web services Web服务中的超时和错误处理-体系结构方法,web-services,architecture,Web Services,Architecture,我正在开发Web服务,对超时/异常处理方法有疑问 我有一个webservice(WS1)和一个客户端C。客户端从用户那里接收一些操作,并调用WS1来执行一些不需要向用户发送响应的操作 我可以用两种可能的方式设计应用程序中的错误处理- 从C调用WS。如果调用成功,WS将返回一个令牌。如果C由于任何原因(可能是WS中的故障或网络超时)没有获得令牌,它将存储在DB中,并且一些作业将在稍后重试该操作 从C调用WS并结束post。如果有任何问题,WS将ping回C(在单独的调用中)。如果没有ping-ba

我正在开发Web服务,对超时/异常处理方法有疑问

我有一个webservice(WS1)和一个客户端C。客户端从用户那里接收一些操作,并调用WS1来执行一些不需要向用户发送响应的操作

我可以用两种可能的方式设计应用程序中的错误处理-

  • 从C调用WS。如果调用成功,WS将返回一个令牌。如果C由于任何原因(可能是WS中的故障或网络超时)没有获得令牌,它将存储在DB中,并且一些作业将在稍后重试该操作

  • 从C调用WS并结束post。如果有任何问题,WS将ping回C(在单独的调用中)。如果没有ping-back,则假定事务已完成


  • 通常,确保WS调用成功的选项有哪些。如果事务在第一次尝试中失败,有哪些方法可以重试该操作?

    这两种方法都是有效的。您所拥有的只是一个同步操作和异步操作。e、 g.插座具有两种模式,可使用多年;例如,文件读取功能也是如此

    选择归根结底是这样的——客户机程序是否能够等待操作完成。如果可以的话,同步操作更容易编程。否则,使用回调进行异步建模

    至于重试次数,这也要视情况而定。重试多长时间?许多程序在失败时只是在循环中尝试2-3次。如果您的重试属于在特定时间后重试的类型,那么您必须在某处存储有关您正在尝试执行的操作的信息。某个地方可能是程序内存,或者一些永久存储器。同步和异步模式都需要信息存储以供重试。异步更是如此,因为当你接到回电时,你需要检查你的商店,找出你试图做什么。在同步模式下,信息多次隐式地存储在程序堆栈中,用于存储数据变量

    那么重试是否也应该在程序崩溃后幸存?如果是这样,那么您需要将信息存储在某个脱机存储中。我曾经有一个电信应用程序;该电信应用程序会将呼叫详细记录写入数据库。如果由于某种原因失败,程序只需将该CDR写入本地文件,然后继续。cron作业将通过将记录发送到DB来清理本地文件中的记录。这样,提供账单信息的通话记录即使在程序崩溃时也能保存下来

    有些人使用消息队列做这些事情。消息队列提供有保证的传递。客户端发送一条消息。服务器端得到它。只有当服务器能够成功处理消息时,才会从Q中删除消息。否则,信息就不会消失;这里的危险是消息可能会有一些永久性的故障,然后它将进入一个无限循环


    由于一些永久性的失败而进入无限循环,比如向WS提供错误的参数,这是您无论如何都必须处理的事情

    感谢您的详细解释,并从同步和异步的角度对其进行了描述。在我正在开发的应用程序中,程序崩溃的可能性不大。环境受到严格监控,并且可以自我纠正。更紧迫的问题是再审问题。最可行的方法是实现一种基于队列的机制,用于从客户端调用WS。