我被赋予了为Web服务创建基于Web的客户端的任务。
我开始在c#中构建它.net 4.0 | MVC3(如果需要我可以使用4.5)
听起来像小菜一碟,直到我发现他们的一些反应是异步的。这是流程......您调用方法并返回ack或nack的响应,以便在您的请求有效时通知您。在确认响应时,您应该期望对您请求的数据进行异步响应,并将其发送到您在请求中提供的回调网址。
以下是我的问题:
如果我正在构建一个Web应用程序并在localhost上调试:{portnum}我该如何给他们一个回调网址。
如果我已经收到回复(ack / nack)并且我的功能完成触发不是我与客户端的连接那么结束?然后,我如何将数据返回给客户端?我唯一的想法是使用像signalR这样的东西,但对于顾客购买流程来说这似乎很疯狂。
我是否必须像对待webhook一样对待他们的回复?构建一些独立的东西,只是听取并且不知道初始请求。只需将数据保存到数据库,然后在循环中获得初始请求,直到有一个记录从webhook发送的唯一ID .... oye vey
这真的让我的大脑受伤: - /
非常感谢任何帮助。文章,最佳实践,任何事情。
提前致谢。
答案 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可能对此有好处。
顺便说一句有趣的问题。