.NET应用的嵌入式Web服务器和GUI框架

4
我正在寻找一个框架,它可以通过基于Web的GUI(使用嵌入式Web服务器)来管理我的应用程序,而不是WinForms。
类似于这样的东西:http://www.webtoolkit.eu/wt,但是针对.NET。
在我的代码中,我应该能够实例化类(如按钮、表单等),当用户浏览到给定端口时,应用程序应该将其呈现为JavaScript / ajax等等。 最好的情况是,当按钮被按下时,会调用我的代码中的通知函数。
这个问题比我发布的另一个关于extjs的问题少了一些具体的内容。我希望这会吸引更多的观众,因为它更加通用。
谢谢。
更新:
像cassini这样的解决方案不适合我。由于Web浏览器嵌入在我的应用程序中,因此没有必要使用ASP.NET服务器端脚本。我宁愿有一个框架,在页面上发生事件时调用我的应用程序内部的函数,例如onButtonClicked()。
9个回答

3
你可以使用 System.Net.HttpListener class 作为嵌入式 Web 服务器。HttpListener 将为您处理底层内容,但您必须编写返回 HTML / JavaScript / 图像的代码。

我自己尝试过这个方法,使用 GeckoFx 嵌入 Firefox 对抗应用程序中嵌入的 Web 服务器。看起来效果很好,但我的测试非常简单和有限。


嗨Rune,我一直在尝试这个选项。我喜欢httplistener提供了一种非常简单的处理传入http请求的方式。不过,将应用程序GUI转换为其JavaScript / HTML对应部分并处理ajax请求是相当大的工作。我希望有人已经做过类似的事情。; ^)不过这是一个很好的项目。我同意。 - Toad
哦,是的!让它运行起来是一回事,但将其制作成完整的应用程序将是一项巨大的工作。如果您最终成功了,应该在博客上或其他地方发布代码。看看它如何工作会很有趣。 :-) - Rune Grimstad
老兄,随口提供GeckoFx链接加100分。那个东西看起来非常棒!谢谢! - Dan F
嘿嘿。是的。它运行良好,但第一次设置很麻烦。 - Rune Grimstad

2
怎么样嵌入 Cassinni 并使用 ASP.NET?

嗨,马克,Cassini是一个迷你独立的Web服务器。我认为让它与我的应用程序通信并不容易(除了通过共享数据库更改数据)。此外,我不喜欢在某个地方有一个充满ASP文件的文件夹,用户可能会弄乱它(或者入侵它)。 - Toad
1
主要是展示如何托管ASP.NET,这是您可以自己完成的。 - Marc Gravell
嗨,我想我误解了产品(和你的回答)。这实际上看起来非常有趣。 - Toad
深思熟虑之后,其实没有必要能够解析/解释/执行 asp.net 页面。如果框架/ Web 服务器可以调用我的应用程序中的函数,会更加优美。 - Toad
在这种情况下,使用HttpListener方法(Rune)-但请注意,它可能会很快变得复杂。有点像在ashx页面中编写所有Web页面。 - Marc Gravell
现在越来越难找到Cassini了 https://dev59.com/knHYa4cB1Zd3GeqPQM9y - Matthew Lock

2
您可以将 ASP.NET 运行时托管到自己的应用程序中,并使用任何网络 UI 框架,例如 LiveUI 或类似框架。请参见此处了解如何操作。

嗨,Alex,将asp.net引入我的应用程序似乎有些过度,因为我的应用程序已经是用c#制作的了。 我宁愿让嵌入式浏览器直接调用我的应用程序方法,而不是提供aspx页面。 此外,最好我不需要了解任何关于html/css/JavaScript的知识。只需在我的应用程序中实例化一些按钮、标签等,然后通过ajax以回调的形式自动生成相应的html/javascript并传递。 结果就是你的应用程序拥有了远程GUI界面。 如果它能以某种方式解释现有的winform GUI,那就更好了。 - Toad
有许多框架可以让你不需要了解HTML、JS和CSS,就能创建丰富的Web用户界面(看起来像这样http://wiki.liveui.net/index.php?title=Editor_and_Form_concept)。问题在于它们都是为ASP.NET设计的。由于ASP只是.NET框架的一部分,所以你有机会在你的应用程序中使用它。 - Alex Kofman

1

如果您可以使用ASP.NET(使用开发服务器或卡西尼),那么您的任务将更简单。我强烈推荐这种方法。在这种情况下,您可以使用liveui、componentart或teleric。 liveui提供基于Extjs的框架来实现三层Web应用程序。 componentart和teleric提供漂亮的ASP.net控件。

而webui可能可以作为httpHandler工作,没有ASP.net基础设施。但我不建议使用webui,因为1潜在的性能问题2复杂且不灵活的编程模型。


1

你的应用程序是否受限于支持哪个框架?如果你可以使用.NET 3.0+,Windows Presentation Foundation 可以用于针对 Web(通过 xbapp 或 Silverlight)和传统的 Windows 窗体应用程序。

至于应用程序之间的通信,这就是 Windows Communication Foundation(WCF)真正发挥作用的地方。

只是为了澄清,你可以使用 Casini 主机你的 Web 应用程序,并使用 WCF 在它和你的应用程序之间进行通信,或者使用 XAML 标记你的应用程序,并将其公开为具有相同 UI 的 Web 应用程序和普通 Windows 应用程序。


0

如果你想要自动地将运行的WinForms代码转换为HTML,那么你已经面临深水区了。我曾使用过Visual WebGui做类似的工作,但它需要修改你的代码,并基本上会为你生成一个ASP.NET应用程序 -- 需要一个真正的Web服务器来运行它。

我看到你不喜欢Cassini选项 -- 如果你也希望这样的操作无需Web服务器运行,那么我想快速的答案是“不可能”。

如果你有相对简单的界面,我认为你最好的选择可能是动态生成HTML代码,要么从你现有的表单中,要么从头开始,然后使用System.Net.HttpListener。


这就是WebToolkit所做的(动态呈现HTML / JavaScript),尽管对于.Net来说不是这样。我希望在某个地方可以找到某些预先准备好的东西适用于.Net。因此,这就是我的问题。 - Toad

0
我很久以前做过一个基于.NET 2.0的项目,主要使用了Webbrowser控件。
我会通过它的Document属性将html提供给WebBrowser控件,并监听导航事件,以便从我的资源中获取Html(或即时构建),并再次提供给WebBrowser控件。

现在有趣的部分开始了,那就是ObjectForScripting属性。这允许你的html页面通过Javascript与.NET对象通信,例如:window.external.SomeNetFunction(bla)
不要忘记为用于ObjectForScripting的类添加ComVisible属性。

希望这正是你所寻找的。在这个解决方案中,你可以拥有一个可以导航的网页,并且还可以通过javascript与你的应用程序通信。(这样你就可以接近.NET版本的AIR...)


嗨,Gidon,这意味着Web控件被嵌入到应用程序中。然而,我想要一个HTML界面的原因是我的应用可以从远程位置进行控制。 - Toad

0

-4
我建议采用Linux路线,依赖于像嵌入式httpd、boa或类似的东西来保持体积小。在嵌入式系统上运行Windows并不推荐,因为太臃肿且存在太多安全漏洞。最好选择Linux或RTOS。

1
我认为他并没有在嵌入式设备上使用Windows...只是想在他的应用程序中嵌入一个Web服务器。 - Pondidum

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接