我有应用程序Android通过Web服务通过将Android应用程序与Windows应用程序(vb.net)连接来控制计算机(重新启动,关机等)。
我不知道从哪里开始以及如何联系对这个主题有任何想法的人?

最佳答案

既然这是一个广泛的问题,而您要提出想法,请允许我倾诉一些想法。

从哪儿开始?为双方都理解的Web服务定义一个协议。例如,定义一个android客户端可以将消息推送到的URI(使用PUT或POST),而vb.net客户端可以轮询更新(使用GET)。由于此处使用一个URI,因此发送到URI的有效负载必须定义要执行的操作。例如,Android客户端可以发布消息'{command:restart}“,然后vb.net客户端应该知道,如果收到该消息,他必须重新启动计算机。

这里有一些警告。首先,vb.net客户端需要轮询URI才能获取命令。因此,在发送命令和执行命令之间会有一些延迟。更好的是,现在您甚至都不知道命令是否已执行。同样,由于没有身份验证,每个人都可以向Web服务发出命令。听起来很有趣。至少对于其他各方。最后,如果该命令已执行或更新,则需要从URI中清除该命令。在此示例中,其他机器将进入重启循环。

因此,第一个问题可以通过使用额外的URI解决,其中android客户端可以轮询vb.net客户端提供的某些系统状态之王。例如,vb.net客户端可以在重新启动之前向URI发送消息“ {state:restarting}”。当然,每次发生某些事件时,vb.net客户端都需要更新该URI。安全问题?安全很难。您可能想要创建证书并对发送的请求进行签名,以便服务器使用它。然后服务器可以检查发送此请求的人是否真的是您。或者有人拥有您的证书,重播了该请求,或者找到了一种破坏整个过程的方法。因此,您可能还想将TLScertificate pinning之王一起使用。您可能已经知道这一点,但是无论如何我都会重复一遍:不要通过不安全的网络发送凭据。同样,base64(在basic authentication中使用)也不是某种加密。最后一个问题可以使用可以包含在命令中的随机数来解决。或者vb.net客户端在收到命令后从URI(带有DELETE)中清除命令。它应该更新状态URI,以便android客户端不会再次发送请求。

或者您放弃使用诸如Web Sockets之类的技术的整个Web服务。然后,Android客户端可以向套接字发送命令。服务器接收to命令并将其发送到vb.net套接字。当vb.net套接字接收到命令时,它会向服务器发送某种交付收据并执行该命令。服务器接收到收据,并向android客户端发送确认,以便知道该命令将要执行。

如您所见,在实现这种解决方案时有很多工作要做,让我总结一下:


定义您的用例。系统必须支持哪些操作,以及在任何情况下参与方如何参与。
查找每个用例的特殊情况。例如,需要解决的身份验证问题。
对以最佳方式支持您的想法的技术进行一些研究。也许Web服务不是最佳解决方案?反正什么是Web服务? (似乎是任何人都使用的流行语之王)。也许Web SocketsXML RPC或什至SOAP是更好的候选人?
为组件定义协议
实施它


最后一点。我知道这是一个相当长的答案?这可能会引起读者很多疑问。但是,不要气our!您不必做我在这里写的任何事情。好吧,也许除了安全性。

10-07 19:57
查看更多