如何处理来自Web服务的异步响应

时间:2013-07-11 21:55:00

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

我被赋予了为Web服务创建基于Web的客户端的任务。

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

听起来像小菜一碟,直到我发现他们的一些反应是异步的。这是流程......您调用方法并返回ack或nack的响应,以便在您的请求有效时通知您。在确认响应时,您应该期望对您请求的数据进行异步响应,并将其发送到您在请求中提供的回调网址。

以下是我的问题:

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

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

  3. 我是否必须像对待webhook一样对待他们的回复?构建一些独立的东西,只是听取并且不知道初始请求。只需将数据保存到数据库,然后在循环中获得初始请求,直到有一个记录从webhook发送的唯一ID .... oye vey

  4. 这真的让我的大脑受伤: - /

    非常感谢任何帮助。文章,最佳实践,任何事情。

    提前致谢。

2 个答案:

答案 0 :(得分:0)

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

使用 ServiceMethod _Async()方法来调用服务。

答案 1 :(得分:0)

我认为你的问题的方式如下,但如果我错了,请纠正我:

1)您向其端点发送请求,其中的参数填充了您的数据。另外,你发送:

  您在请求中提供的

回调网址。 (引自你的问题)

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

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

如果这是流程,那么并非所有情况都不常见,特别是如果他们这边的操作可能需要很长时间。所以,假设您有一些方法,我们将其称为HandleResponse(数据)。如果您原本打算同步执行此操作(这在Web世界中很少发生),那么您可能会调用HandleResponse(http-webservice-call-tothem);

相反,由于是他们正在启动对HandleResponse的调用,您需要在Web应用程序中设置路径,如/ myapp / givemebackmydata / {data}并将其挂钩到HandleResponse。然后,将callbackurl指定为/ myapp / givemebackmydata / {data}。请记住,如果没有更多信息,我不能说他们是否会将POST请求的主体发送给您的处理程序,或者他们是否会将URL的一部分用实际数据替换,在这种情况下您需要将回调网址中的{data}替换为他们在文档中规定的任何占位符。他们有文件吗?如果他们不这样做,这一切都无济于事。

最后,为了在客户端上获取数据,您可能需要在Web客户端中使用某种轮询循环,最好是通过AJAX。这将在setInterval上运行并定期点击服务器上的某个页面,该页面保持状态以确定其web服务是否已调用您的回调URL。这是较为粗略的部分,因为您需要为每个请求提供状态,因为多个人可能正在等待回调,并且每个回调URL命中将映射到其中一个等待的客户端。 GUID可能对此有好处。

顺便说一句有趣的问题。