0

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

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

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

以下是我的问题:

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

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

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

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

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

提前致谢。

4

2 回答 2

0

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

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

于 2013-07-11T22:00:10.533 回答
0

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

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

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

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 上运行,并定期访问您服务器上的某个页面,该页面保持状态,以了解他们的网络服务是否已经调用了您的回调 url。这是更棘手的部分,因为您需要为每个请求提供状态,因为可能会有多个人在等待回调,并且每个回调 url 命中都会映射到其中一个等待的客户端。GUID 可能对此有好处。

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

于 2013-07-11T22:31:47.783 回答