【发布时间】:2013-04-04 13:59:36
【问题描述】:
我目前正在处理一个电子商务项目,我需要一些有关我的付款页面的帮助。在结帐页面,我得到了用户的支付信息,它只是一个 GSM 号码,我将它发布到支付系统服务,它返回一个同步响应。响应可以是“OK”、“NOT OK”、“AWAIT”和“TIMEOUT”。 OK 表示支付成功,NOT OK 表示支付不成功,当然“TIMEOUT”表示支付操作超时。
棘手的部分是“等待”。该服务的超时时间为 4 分钟。这 4 分钟用于用户通过他/她的手机完成他/她的付款。支付系统以这样不同的方式工作,当我开始支付过程时,服务立即返回“AWAIT”并向用户的智能手机发送通知。此通知启动,我们称其为自定义钱包,自定义钱包应用程序。然后,用户选择他/她在此自定义钱包系统中预定义的支付卡并确认支付。用户有 4 分钟的超时时间。在这 4 分钟内,他/她要么完成付款,要么操作超时。 我的问题是,这个支付服务是一个同步操作。所以,我必须每 5 秒调用一次,持续 4 分钟,直到我得到除“AWAIT”之外的响应。到这个时候,我必须向页面返回一个同步响应,表明支付过程已经开始并等待用户确认,并启动一个异步操作,检查这个自定义钱包服务 4 分钟并获得响应。然后我需要将此异步响应发布到网页。
我正在寻找一种解决此问题的方法,以避免可能出现的问题,如并发或同步。我也希望有一些示例代码。 谢谢...
【问题讨论】:
-
What I'm looking for is a way to solve this problem你已经很好地描述了你的任务。但不知何故,我没能准确地看到问题出在哪里。你介意为有短期记忆的人解释一下吗? -
您遇到的问题不仅仅是并发问题 - 在处理付款时可靠性也非常重要。与其尝试将您自己的 99% 的时间都有效的解决方案组合在一起,我会研究更强大的东西,例如 WCF,这样您就永远不会忘记可能需要 4 分钟才能完成的支付交易。跨度>
-
由于其他原因,我无法使用 WCF。我只是将 httpwebrequest 发布到 url。
-
@dopache - 不要沉迷于特定的框架。关键是 - 您正在做什么以确保 1) 不会丢失任何付款请求,以及 2) 不会多次处理付款请求?
标签: c# asp.net multithreading asynchronous concurrency