我有一个WPF应用程序,我想将其转换为从浏览器运行的应用程序。原因是WPF不能在Mac / Linux上运行,并且Silverlight不是一个选项,因为它有安全限制。
基本思想是将应用程序转换为类似Web服务器的应用程序,并在html / ajax中完全处理UI。这个'webserver'不依赖于WPF / Winforms,因此也可以在Mono上运行。您甚至可以在旅途中通过Android / iOS设备控制应用程序。
我的问题是:是否可以使用.NET创建此用户界面? webserver-part的代码不是问题,但我正在努力处理正在服务的实际html。例如,当有人点击按钮时,我需要将事件绑定到该按钮。我必须为所有那些小'事件'编写大量的javascript,用于简单的控件,如列表框,进度条等。如果我可以从VS设计Web界面那么容易得多。虽然它支持ASP,但我无法使用它的页面设计器,因为最终用户不会在其台式PC上运行ASP服务器。
那么使用.NET设计这些动态页面的最佳方法是什么?或者这根本不可能?
编辑:为了更清楚,它不是互联网应用程序。用户在本地运行服务器部分,并连接到127.0.0.1:80以查看应用程序的用户界面。
编辑II:因为它们看起来很混乱,让我举一个类似应用的例子:SABnzbd。它是一个二进制新闻抓取器,您可以安装为“Windows服务”,并可以通过您的webbrowser进行控制。它是多平台的,用Python编写。我想采用相同的方法,只使用(VB).NET
答案 0 :(得分:1)
首先让我说:是的。您可以使用.Net创建基于Web的UI。
第二,让我说你的问题中有太多不正确,很难知道我应该从哪里开始。
Silverlight不是一个选项,因为它有安全限制
咦?!?
webserver-part的代码不是问题
为什么要编写自己的Web服务器?你为什么要知道怎么做,而不知道ASP.Net是什么?
虽然它支持ASP,但我无法使用它的页面设计器,因为最终用户不会在其台式PC上运行ASP服务器。
咦?!?首先,页面设计者与渲染的html如何到达用户有什么关系?其次,您的用户无需在其计算机上运行任何服务器。您的Web服务器是服务器。您的用户只需要一个浏览器。
将现有WPF应用程序转换为Web应用程序的最简单方法是将其转换为Silverlight。如果(如你所说)你不想这样做,那么我建议你研究一下ASP.Net。如果您安装IIS(Windows Server免费),您可以轻松免费部署ASP.Net。这将能够为Mac,Windows,Linux等机器提供内容。您的用户无需在其计算机上运行ASP Server。他们只需要一个浏览器。
ASP.Net允许您将事件处理程序绑定到按钮单击等事件。它还允许您动态生成页面。
编辑(回答编辑过的问题)
编辑:为了更清楚,它不是互联网应用程序。用户在本地运行webserver / http守护程序,并连接到127.0.0.1:80以查看应用程序的用户界面。
如果用户在本地运行Web服务器和客户端应用程序,那么您获得了什么?如果您希望此应用程序在多个平台上运行,您仍然必须编写应用程序以支持这些平台(无论您是在编写Web服务器还是GUI)。
答案 1 :(得分:1)
如果您愿意重写GUI,为什么不使用GTK#或Winforms?两者都在Windows + Linux上运行。检查What is the difference between GTK# and Windows Forms?以进行比较。
答案 2 :(得分:0)
安全101 - 客户被视为敌意。任何架构中的任何客户端。没有什么特别不安全的Silverlight,所以如果它满足您的其他需求,那么使用它。并验证服务器上的所有内容;无论如何你需要做什么。
答案 3 :(得分:0)
为什么不构建一个使用GTK#for UI的客户端应用程序? - 然后它就可以在所有平台上使用。
答案 4 :(得分:0)
我一直只想到两种可能的解决方案:
HTML5 / Ajax解决方案的问题在于.NET无法设计UI。
Silverlight解决方案的问题在于“提升信任度”仍然没有给我足够的权限。
CodeInChaos 和 Blindy 向我指出了正确的方向,第三个解决方案:
我只会将Silverlight用于客户端部分,而不是整个应用程序。并通过localhost-connection(JSON或类似的东西)与服务器.exe进行通信。这样我就可以使用.NET设计UI,没有Silverlight的限制,也没有文件系统/注册表/套接字的完全访问权限。
答案 5 :(得分:0)
现在你声明你将使用银光作为网络应用程序。这不是摆脱你决定在客户端 - 服务器架构上的全部原因吗?说真的,有多少手机运行Silverlight?您仍然可以使用其他计算机,但这似乎与手机几乎没有用。像其他一些人建议的那样,使用Gtk#作为UI。您必须以任何方式编写Android / iOS端口。