1

我正在为一个基本的 Youtube 遥控器做一个小项目,我在我的电脑上运行了一个帮助应用程序,然后可以从通过手机上的网络浏览器访问的网站发送命令。

阅读其他网站上试图做同样事情的人的帖子,我意识到这不是大多数人会接受的概念,但除了为我的本地应用程序编写本机应用程序之外,我正在努力思考另一种方法来做到这一点电话并让它通过 WLAN 在内部与帮助程序应用程序通信(很乐意这样做,但没有现金为我的 iPhone 开发新的 Mac)。

如果我坚持使用网站/Winforms 模型,有没有办法让(大多数)人能够舒适地跑步?

到目前为止,我的想法是:

a)在帮助应用程序中构建一个 Web 服务器(虽然不确定让它托管一个 ASP.net 站点的后勤工作)

b)在外部托管站点,并让助手应用程序定期轮询服务器上的数据库/网络服务以接收命令(粗略,我想资源很重)

对不起,文字墙,我有能力运行一个想法并构建它,我只是不确定什么是可能的,并且被认为是做这样的事情的“最佳”方式。

任何意见,将不胜感激。

干杯

编辑谢谢,为了清楚起见,当我说不舒服时,我的意思是-您是否可以让网站能够向您的计算机发送潜在的任何命令?这似乎是有关该主题的其他讨论中提出的问题。显然我并没有试图做任何恶意的事情,但正如我所说,这似乎是一个问题。

4

1 回答 1

0

如果这是一个受控环境,您始终可以在防火墙上打开一个端口以进行传入通信,您可以让 Web 应用通过用户防火墙向 Windows 客户端进行 WCF 回调。

如果不是(这是我怀疑的),您最好轮询 Web 服务。只需每隔几秒钟执行一次,无论您在该 Web 服务调用(数据库?)中检查什么,确保它得到了很好的优化。也许只是让它返回一些状态 int/enum 或一些非常轻量级的东西来指示客户端进行下一次调用(0 = 无更新,1 = command1,2 = command2 等)。

至于如何进行轮询,您可以执行以下操作:

int seconds = 4;
System.Timers.Timer _clientTimer = new System.Timers.Timer(seconds * 1000);
_clientTimer.AutoReset = false;
_clientTimer.Elapsed += clientTimer_Elapsed;
_clientTimer.Start();

private void clientTimer_Elapsed(object sender, ElapsedEventArgs e)
{
    try
    {
        // Connect to web service, get status, if status != 0 do something...
    }
    finally
    {
        _clientTimer.Start();
    }
}

注意: auto-reset = false 表示每次 Elapsed 事件触发时,计时器都会停止。在我采用的方法中,我让计时器停止,以便客户端可以处理 Web 服务结果,然后在完成后再次启动计时器。如果连接真的很慢,这将有助于防止多个请求堆积。

这就是我能想到的:)

于 2013-05-14T19:17:25.850 回答