【问题标题】:How do you handle an Async Response from a Web Service如何处理来自 Web 服务的异步响应
【发布时间】:2013-07-11 21:55:00
【问题描述】:

我的任务是为 Web 服务创建基于 Web 的客户端。

我开始用 c# 构建它 | .net 4.0 | MVC3(如果需要我可以使用 4.5)

听起来像小菜一碟,直到我发现他们的一些响应是异步的。这是流程......您调用一个方法,他们返回 ack 或 nack 的响应,让您知道您的请求是否有效。收到 ack 响应后,您应该会收到包含您请求的数据的异步响应,该响应将发送到您在请求中提供的回调 url。

这是我的问题:

  1. 如果我正在构建 Web 应用程序并在 localhost:{portnum} 上进行调试,我该如何给他们一个回调 url。

  2. 如果我已经收到响应 (ack/nack) 并且我的函数完成触发,我与客户端的连接不是结束了吗?然后我将如何将数据返回给客户端?我唯一的想法可能是使用 signalR 之类的东西,但这对于客户购买流程来说似乎很疯狂。

  3. 我是否必须像对待 webhook 一样对待他们的响应?构建一个单独的东西,只听并且不知道初始请求。只需将数据保存到数据库,然后进行初始请求 while 循环,直到有从 webhook 发送的唯一 id 的记录.... oye vey

这真的让我很头疼:-/

任何帮助将不胜感激。文章,最佳实践,任何东西。

提前致谢。

【问题讨论】:

  • 你找到解决方案了吗?

标签: c# .net asp.net-mvc-3 web-services asynchronous


【解决方案1】:

如果您创建服务引用,它将生成一个 *ServiceMethod*Completed 委托。在其上注册一个事件处理程序来处理您的数据。

使用ServiceMethod_Async()方法调用服务。

【讨论】:

    【解决方案2】:

    我对您的问题的看法如下,如果我对此有误,请纠正我:

    1) 您向他们的端点发送一个请求,其中包含您的数据填充的参数。此外,您发送:

    您在请求中提供的回调网址。 (引自你的问题)

    2)他们(希望)为您的有效请求发送确认

    3) 他们最终将完成的数据发送到您的回调 url(您指定)。

    如果这是流程,这并不少见,尤其是如果他们这边的操作可能需要很长时间。所以假设你有一些方法,我们称之为 HandleResponse(data)。如果您最初打算同步执行此操作,这在网络世界中很少发生,您可能会调用 HandleResponse( http-webservice-call-tothem );

    相反,由于是他们发起了对 HandleResponse 的调用,因此您需要在 Web 应用程序中设置一个路由,例如 /myapp/givemebackmydata/{data} 并将其挂钩到 HandleResponse。然后,将它们的回调 URL 指定为 /myapp/givemebackmydata/{data}。请记住,如果没有更多信息,我不能说他们是否会将其作为 POST 请求的主体发送给您的处理程序,或者他们是否会将部分 url 替换为实际数据,在这种情况下,您需要将回调 url 中的 {data} 替换为他们在文档中规定的任何占位符。他们有文档吗?如果他们不这样做,那么这些都不会有太大帮助。

    最后,要将数据返回到客户端,您可能需要在 Web 客户端中进行某种轮询循环,最好是通过 AJAX。这将在 setInterval 上运行,并定期访问您服务器上的某个页面,该页面会保持其 Web 服务是否已调用您的回调 url 的状态。这是更棘手的部分,因为您需要为每个请求提供状态,因为可能会有多个人在等待回调,并且每个回调 url 命中都会映射到其中一个等待的客户端。 GUID 可能对此有好处。

    顺便说一句,这个问题很有趣。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多