我看过,当一方有问题以及如何处理问题时,我无法了解对话会发生什么。我认为,当TargetService出现错误时,我已经看过几次,导致发生另一个错误。
我有一个存储过程,可以开始对话,并将RequestMessage
发送给与TargetQueue
和合同关联的TargetService
。然后等待最多5秒钟,以便在InitiatorQueue
上收到带有该会话句柄的消息。
同时,另一台服务器上的应用程序正在循环中等待TargetQueue
上的消息,处理它们调用另一个系统,并将ResponseMessage
发送到InitiatorQueue
。
超时
由于存储过程应该响应,因此用户正在等待响应,因此最多等待5秒钟。如果应用程序发送响应的时间超过5秒,则会继续并结束会话。当应用程序最终成功时,它会将响应发送到InitiatorQueue
并结束对话。
那么ResponseMessage
中的InitiatorQueue
会发生什么?是否必须以某种方式清理?由于请求者只使用相同的会话句柄来侦听响应,因此永远不会收到它。当我为对话框指定的60秒生命周期到期时,它会被删除吗?
错误
那么,当TargetQueue
中有消息时,如果应用程序出现严重错误并崩溃(或服务器出现故障)该怎么办?启动器将关闭对话的一侧,对话框的60秒生命周期将会过去。一切都会被清理干净吗?
如果从TargetQueue
收到消息并且在发送响应之前发生错误,该怎么办?那个对话还没有出现吗?
只是进行了一些测试,如果发件人已经关闭了对话框,那么我在TargetQueue
收到消息时似乎无法判断。这导致应用程序处理RequestMessage
并将SEND错误输出到InitiatorQueue
。可以/我是否应该尝试在TargetQueue
上接收并在存储过程中第二次关闭对话框以在返回超时错误之前清除队列?