需要通过asp.net网站控制c# winforms应用程序的一些建议

本文关键字:应用程序 winforms 控制 asp 网站 net | 更新日期: 2023-09-27 18:13:26

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

阅读其他网站上的线程,从人们试图做同样的事情,我已经意识到这不是一个大多数人会感到舒适的概念,但我正在努力想出另一种方法来做到这一点,除了为我的手机编写一个本地应用程序,并通过WLAN与内部助手应用程序通信(我很乐意这样做,但没有现金为我的iphone开发一个新的mac)。

如果我坚持使用网站/Winforms模型,是否有一种方法可以做到这一点,这样(大多数)人会很舒服的运行?

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

a)在辅助应用程序中构建一个web服务器(尽管不确定让它托管ASP.net站点的逻辑)

b)在外部托管站点,并让助手应用程序定期轮询服务器上的数据库/web服务以接收命令(Sketchy和我想象非常重的资源)

抱歉的文字墙,我有能力运行一个想法和构建它,我只是不确定什么是可能的,并认为"最好"的方式来做这样的事情。

如有任何建议,不胜感激。

欢呼

编辑谢谢,只是要清楚,当我说不舒服,我的意思是-你会有一个网站能够发送潜在的任何命令到您的计算机?这似乎是关于这个话题的其他讨论中提出的问题。显然,我并没有恶意,但正如我所说,这似乎是一个问题。

需要通过asp.net网站控制c# winforms应用程序的一些建议

如果这是一个受控的环境,你可以在防火墙上打开一个端口进行传入通信,你可以让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服务结果,然后在完成后再次启动计时器。如果连接非常慢,这将有助于防止多个请求堆积。

我能想到的就这些