2013-05-14 53 views
1

我正在开发一个基本的Youtube远程控制的小项目,从而我的PC上运行了一个帮助程序,然后可以发送命令来自通过我的手机上的网络浏览器访问的网站。需要通过asp.net网站控制C#winforms应用程序的一些建议

阅读其他网站上的线索,试图做同样的事情我已经意识到这不是一个大多数人会感到舒服的概念,但我正在努力想办法做到超越写作我的手机原生应用程序,并通过WLAN与助手应用程序进行通信(很乐意做到这一点,但没有现金来弹出一个新的Mac为我的iPhone开发)。

如果我坚持使用Website/Winforms模型,是否有办法以(大多数)人会舒适地运行的方式来完成此操作?

我有想法到目前为止是:

一)建立一个Web服务器到助手应用程序(虽然不知道有它举办一个ASP.net网站)

B)主机的物流该网站外部,并有助手的应用程序定期轮询服务器上的数据库/ web服务器接收命令(粗略和我想象非常资源沉重)

对不起,我可以运行一个想法并构建它,我只是不确定什么是可能的,并认为是做这种事情的“最佳”方式。

任何意见,将不胜感激。

干杯

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

+0

你是一个有点不清楚人为什么会不舒服,如果你想舒适度相关的答案,你需要这个清晰。 –

+0

感谢您的回复Robert,我希望我在编辑中有足够的阐述。 –

回答

0

如果这是一个受控环境,您可以随时在防火墙上打开传入通信的端口,则可以让Web应用程序通过用户防火墙将WCF呼叫回Windows客户端。

如果没有(这是我怀疑的),你可能会更好地轮询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(); 
    } 
} 

注:自动复位=,每次经过的事件触发时,计时器停止虚假手段。在我采取的方法中,我让计时器停止,以便客户端可以处理Web服务结果,然后在完成后再次启动计时器。这将有助于防止多个请求堆叠起来,如果连接真的很慢。

这是所有我能想到的:)

+0

谢谢Adam!状态调用是一个好主意,我认为如果我沿着投票路线走,那肯定会成为这样做的途径。 –

+0

我正在寻找更多的WCF的想法,我很高兴它是一个受控制的环境,我宁愿保持内部通过网络,而不是投票到我托管的服务器,如果我可以。尽管我对WCF的可能性了解不多。我的'帮手'winforms应用程序可以运行服务,然后让网站打电话给它?我认为它是内部的,需要由应用程序托管的网站,尽管这将我带回计划A ... –

+0

这两种方法都有明显的优点和缺点。通过执行WCF,您需要在路由器和客户端机器上运行的任何软件防火墙上打开端口,但与轮询方法相比,它将使用更少的资源/流量。在我的工作中,我们也需要一个网页来与Winforms应用程序进行通信。我们实际上已经摆脱了WCF方法(实际上它的前身:.NET Remoting)到轮询方法,因为它需要太多的客户端配置。不过,这取决于你的情况。 –