【发布时间】:2008-10-01 14:09:19
【问题描述】:
我在 .Net 中有一个非常基本的 Windows 窗体应用程序。所有代码都是 C#。我想把它变成一个 Asp.net 网络应用程序。我怎样才能轻松做到这一点?
我认为有一个简单的方法,因为我拖放到 windows 窗体设计器上的控件与我拖放到 aspx 设计页面上的控件几乎相同。
注意:windows 窗体应用程序不会发出任何网络请求或任何东西...只是从本地计算机读取一些文本文件。
【问题讨论】:
我在 .Net 中有一个非常基本的 Windows 窗体应用程序。所有代码都是 C#。我想把它变成一个 Asp.net 网络应用程序。我怎样才能轻松做到这一点?
我认为有一个简单的方法,因为我拖放到 windows 窗体设计器上的控件与我拖放到 aspx 设计页面上的控件几乎相同。
注意:windows 窗体应用程序不会发出任何网络请求或任何东西...只是从本地计算机读取一些文本文件。
【问题讨论】:
这里有两个大问题;首先——它们可能看起来一样,但它们的实现方式完全不同——所有的 UI 工作都需要重做,主要是从头开始。不过,您可能能够重用您实际的“执行”代码(即操作文件的逻辑)。
第二 - 定义“本地机器”。对于 ASP.NET 应用程序,这通常是服务器,这可能不是您想要的。你可以通过 javascript 在客户端做一些事情,但是沙盒安全模型会阻止你做很多文件 IO。
我建议也许看看 Silverlight,它介于两者之间 - 或者只是使用 ClickOnce 将现有的 winform exe 部署到远程客户端。
【讨论】:
您可能会在通过 ASP.Net 从本地计算机读取文件时遇到问题:对于 ASP.Net 应用程序,本地计算机是 Web 服务器,而不是用户所在的计算机。
此外,它的功能远比您想象的要多。很可能在您的应用程序中的某个地方,您依赖于 Windows 窗体应用程序本质上是有状态的这一事实,而在这方面迁移到 ASP.Net 将是一个粗鲁的觉醒。
【讨论】:
界面将不得不改变,因为控件不同。如果您有支持的业务类和其他类似性质的项目,您可以将它们复制过来,否则需要重新构建 UI。
【讨论】:
ASP.NET 和 Windows 窗体是 2 个完全不同的模型。是的,设计师是相似的,但是页面/表单的底层表示是不同的。主要区别在于 ASP.NET 是无状态的,因此您必须在操作之间调整存储数据的方法并将其推送到 Session 对象。
对于只有你会使用的本地应用程序,我的建议是坚持使用 Windows 窗体。
【讨论】:
这实际上取决于应用程序的设计方式。如果您在 Windows 窗体中拥有应用程序的所有“业务逻辑”,那么您将很难将其转换。如果逻辑在它自己的层中,它会容易得多。请意识到 Windows 和 Web 窗体之间存在很多差异;最大的问题之一是 Web 表单与用户断开连接,并且每次请求都会发送状态信息。 Winform 的功能当然更全。
【讨论】:
不幸的是,事情不会那么简单。您的 C# 代码和逻辑将很容易转移,但 WinForms UI 与 ASP.NET UI 完全不同。
如果您对可以使用与现有 C# 应用程序相同类型的非 HTML GUI 设计器设计的“Web 应用程序”感兴趣,请查看 Microsoft Silverlight。它旨在成为新的 Web 版 Windows Presentation Foundation(WPF,WinForms 的继任者)的一个版本。
【讨论】: