2013-07-11 76 views
0

我被赋予了为Web服务创建基于Web的客户端的任务。如何处理来自Web服务的异步响应

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

听起来像一块蛋糕,直到我发现他们的一些反应将是异步的。这是流程...你调用一个方法,并且他们返回ack或nack的响应,让你知道你的请求是否有效。一旦ack响应,您应该期望对您请求的数据进行异步响应,这将发送到您在请求中提供的回调url。

这里是我的问题:

  1. 如果我建立在本地主机上的web应用程序和调试:{}端口编号我怎么可以给他们一个回调URL。

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

  3. 我是否必须像webhook一样对待他们的回应?建立一个单独的,只是监听,并不知道最初的请求。只需将数据保存到数据库,然后有while循环的初始请求,直到有从网络挂接发送的唯一ID的记录....奥耶合租

这确实有我的大脑伤害: -/

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

在此先感谢。

回答

0

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

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

0

我认为你的问题的方法如下,但请纠正我,如果我错了这一点:

1)你发送一个请求到他们的端点充满了你的数据参数。此外,您发送了:

您在请求中提供的回叫网址。 (从你的问题引述)

2)他们(希望)发送一个ACK为您有效的请求

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

如果这是流量,这并不罕见,特别是如果他们身边的操作可能需要很长时间。所以,假设您有一些方法,我们将其称为HandleResponse(数据)。如果你原本打算同步这样做,这在网络世界很少发生,你可能会称之为HandleResponse(http-webservice-call-tothem);

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

最后,为了将数据返回到客户端,您可能需要在您的Web客户端中进行某种轮询循环,最好是通过AJAX。这将在setInterval上运行,并周期性地在您的服务器上的某个页面上保存状态,以确定他们的webservice是否调用了您的回调URL。这是最重要的部分,因为您需要为每个请求提供状态,因为多个人可能正在等待回调,并且每个回调URL都会映射到其中一个等待的客户端。 GUID可能对此很有帮助。

有趣的问题,顺便说一下。