在 Linux 上部署 ASP.NET AJAX RSS 阅读器





0/5 (0投票)
作者 Jonas Martinsson 是一位企业家,也是 Mainsoft 开发团队的成员。Jonas 帮助将 Mainsoft 的 .NET-Java EE 互操作产品与 Visual Studio IDE 集成。
简介
您是否曾希望能在 Linux® 上运行 ASP.NET 应用程序,而无需重写代码或离开 Visual Studio® 开发环境?在本文中,我们将向您展示如何将 Steve Clements 的 AJAX ASP.NET RSS 阅读器移植到原生 Java™ 并将其部署到 Linux 上的 Apache Tomcat。我们还将向您展示如何在 Visual Studio 中添加来自 AJAX Control Toolkit 的 AnimationExtender 和 HoverMenu,同时面向 Java。
这怎么可能?答案是使用 Grasshopper,一个由 Mainsoft 与 Mono 开源社区合作构建的基于 Visual Studio 的免费 SDK。Grasshopper 2.2 引入了对 AJAX 的全面支持,并与 ASP.NET 2.0 AJAX 扩展和 AJAX Control Toolkit 无缝集成,因此您只需添加几个服务器控件即可添加部分页面渲染、手风琴导航和圆角等流行功能。
在本文中,我们将介绍如何
- 分析源代码以识别可能的移植问题。
- 将 RSS 阅读器和 RSS 工具包转换为 Grasshopper 项目类型。
- 为 Java 构建 ASP.NET 解决方案。
- 使用 AJAX Control Toolkit 添加丰富的客户端功能。
- 在 Linux 上部署 ASP.NET 应用程序。
分析源代码
首先,我们识别源代码中的第三方依赖项。RSS 阅读器有两个:AJAX Control Toolkit 和 ASP.NET RSS Toolkit,两者都是 CodePlex 上托管的开源项目。由于这些是 .NET 库,它们在我们将其交叉编译到 Java 平台之前无法在 Java 上运行。
有多种策略可以将第三方依赖项移植到 Java。您可以
- 查看我们的示例和代码块,看看组件是否已移植。
- 如果源代码具有宽松的许可证,请自行将组件移植到 Java EE。
- 检查供应商是否有 Java EE 替代方案。许多第三方组件同时适用于 .NET 和 Java 平台,包括 Crystal Reports、Corda OptiMap 和 Software FX。
AJAX Control Toolkit 属于第一类,将在下面讨论,而 RSS Toolkit,根据宽松的 Microsoft Public License (Ms-PL) 许可,将在此处移植。
转换 Web 应用程序
让移植过程开始吧!
首先,我们安装 Grasshopper,这是一个来自 Mainsoft 的免费 Visual Studio 附加组件,它允许 .NET 和 Java 之间的所有魔法发生。Grasshopper 本质上是一个交叉编译器,将 .NET 字节码 (MSIL) 转换为 Java 字节码。构建输出是一个二进制 *.jar 文件,**而不是** Java 源代码,尽管如果您愿意,可以通过 Java 反汇编器运行字节码。Grasshopper 与 Visual Studio 的构建系统无缝集成,并在 Microsoft 的常规 MSIL 构建完成后触发自己的代码验证、代码生成和部署构建步骤。最重要的是,Grasshopper 捆绑了 Apache Tomcat Web 应用程序服务器,因此在开发过程中无需将测试构建部署到远程 Web 服务器。
RSS 阅读器项目使用 Visual Studio Web 站点格式,这是 Visual Studio 2005(无 SP1)中的默认项目格式。为了让 Grasshopper 与项目一起工作,我们首先将 Web 站点转换为 Web 应用程序项目类型
-
在 Visual Studio 中,从 **Visual C# for Java EE > 启用 AJAX 的 ASP.NET Web 应用程序**模板创建一个新的“RSSReader”项目。Grasshopper 为 Visual Studio 的新建项目对话框添加了两种新的项目类型:Visual C# for Java EE 和 Visual Basic for Java EE。
-
在同一解决方案中打开 RSS 阅读器 Web 站点。
-
将所有项目文件(引用除外)从 Web 站点拖放到 **RSSReader** 项目,覆盖任何默认项。
-
右键单击解决方案资源管理器中的 RSSReader 项目节点,然后选择**转换为 Web 应用程序**。
有关转换过程的更多详细信息,请参阅 Mainsoft 的在线文档。
RSS 阅读器使用 ASP.NET RSS Toolkit 的 1.0.0.1 版本。由于 CodePlex 上的下载包不包含任何 Visual Studio 项目文件,我们从源代码创建一个新的 .NET 类库项目(“RSSToolkit”)并将其添加到我们的解决方案中。为了构建 RSS Toolkit,我们还需要向类库项目添加对 `System.Configuration`、`System.Design`、`System.Drawing`、`System.Web` 和 `System.Windows.Forms` 的引用。我们验证构建成功,然后从 RSS Toolkit 生成一个 Grasshopper 项目。
Grasshopper 为解决方案资源管理器的项目节点添加了一个新的上下文菜单项:**生成 Java EE 项目**。为 RSSToolkit 项目选择此选项会弹出一个向导,该向导分析项目依赖项并为未解析的引用建议替代方案。在这种情况下,因为 RSS Toolkit 没有非框架依赖项,所以向导不会提供任何选项。完成后,我们的解决方案中会创建一个新项目:**RSSToolkit.JavaEE**。
![]() |
|
图 1:添加 Java 引用 |
现在,我们通过选择 **添加 Java 引用...**(Grasshopper 添加的另一个新菜单项,参见图 1)并从“项目”选项卡中选择 **RSSToolkit.JavaEE**,从 RSSReader 添加对 Java 版本的 RSSToolkit 的引用。
我们从解决方案中删除 Web 站点和 RSS Toolkit 项目的 .NET 版本,因为它们不再需要。
为 Java 构建
如果我们尝试构建新生成的 Java 项目,我们会看到引用“不支持”的类和方法的错误。由于 .NET 和 Java 平台之间的根本差异,用于实现 .NET 框架的 Java 运行时库存在一些限制。产品文档的运行时框架概述部分提供了有关此主题的更多详细信息。这些限制是导致上述构建错误的原因,并且在 Grasshopper 验证 .NET 代码时会捕获它们。
要成功构建应用程序,我们需要修改源代码,使其仅使用受支持的方法和类。当面向 Java 平台时,可以在 Visual C# 或 Visual Basic 代码中调用完整的 Java 框架,因此我们始终可以选择使用受支持的 .NET 类和方法,或者使用 Java 框架。如果您希望为同时面向两个平台维护一个单一源代码库,请使用条件编译指令 (`#if JAVA`) 来分隔 .NET 或 Java 特有的部分。
在我们的示例应用程序中,我们看到的错误是由于使用了 BuildProvider,由于它与 `System.CodeDom` 的紧密耦合而不受支持。我们检查生成错误的 RSS Toolkit 类,发现它们仅用于生成 RSS 源,而不是用于消费 RSS 源——这只是 RSS 阅读器的唯一要求。这里务实的解决方案是在为 Java 构建时忽略负责生成 RSS 的三个类。有两种方法可以实现这一点,它们之间的选择更多是风格问题。我们可以从 RSSToolkit.JavaEE 项目中排除文件,或者我们可以用预处理器指令包装它们
#if !JAVA
// .NET specific code goes here
#endif
我们还需要使用 `#if !JAVA` 指令包装访问这些类的代码。
从 .NET 平台转移到 Java 时要记住的另一个问题是,我们需要为文件名使用正确的字母大小写。这是因为 .NET 和 Windows 不区分小写或大写,而 Java 区分。
在 Grasshopper 中使用 ASP.NET AJAX
RSS 阅读器还依赖于 AJAX Control Toolkit,这是一个由 Microsoft 和开发人员社区共同开发的项目。Grasshopper 为 AJAX Control Toolkit(以及 Anthem.NET AJAX Toolkit)提供全面支持,并捆绑了移植的源代码。为了引用 AJAX Control Toolkit,打开项目(默认可在 C:\Program Files\Mainsoft for Java EE\Samples\CS\Tomcat\AjaxControlToolkit\ 找到),使用 Grasshopper 构建它,然后使用 **Add Java Reference...** 选项将输出的 AjaxControlToolkit.jar 文件添加到您的项目引用中。确保程序集文件 (AjaxControlToolkit.dll) 与 *.jar 文件位于同一文件夹中。
原始的 RSS 阅读器项目使用了 ASP.NET AJAX 的预览版本,因此,在 Web.config 中包含 `tagMapping` 元素以启用 AJAX 验证器。这些类型已从 ASP.NET AJAX 的正式版本中移除。要解决此问题,只需从 Web.config 中移除 `tagMapping` 元素。
这次,构建成功。从 **开始 > 所有程序 > Mainsoft for Java EE > 启动 Tomcat** 启动 Grasshopper 捆绑的 Tomcat 服务器,然后按 Ctrl-F5 从 Visual Studio 运行应用程序。瞧!Tomcat 运行 Java 应用程序,该应用程序是从 ASP.NET 移植的。
当然,这种转换是一个一次性过程。现在我们可以继续在 Visual Studio 中使用 Visual C# 或 Visual Basic 开发源代码,就像开发任何 .NET 应用程序一样,利用 Visual Studio 的可视化设计器、调试器、IntelliSense 和其他开发功能。
为 Java 的 RSS 阅读器添加新的 AJAX 功能与向部署在 Windows 上的 ASP.NET 应用程序添加 AJAX 控件几乎是相同的过程。举例来说,我们将使用 **AnimationExtender** 在鼠标光标未悬停在订阅源列表上时模糊该列表。
为了让 AJAX AnimationExtender 控件能够访问订阅源列表,我们用一个 ASP.NET 控件将其包装起来;`<asp:panel>` 很好地实现了这个目的。将 AnimationExtender 控件拖放到 Visual Studio 中 Default.aspx 页面的设计界面,并将其 `TargetControlID` 属性设置为 `<asp:Panel>` 的 ID。现在我们将定义用于在特定事件上淡入和淡出列表的动画
<ajaxT:AnimationExtender ID="AnimationExtender1"
runat="server" TargetControlID="FeedList">
<Animations>
<OnLoad>
<FadeOut MinimumOpacity=".2" />
</OnLoad>
<OnHoverOver>
<FadeIn MinimumOpacity=".2" Duration=".3" />
</OnHoverOver>
<OnHoverOut>
<FadeOut MinimumOpacity=".2" />
</OnHoverOut>
</Animations>
</ajaxT:AnimationExtender>
顺便说一下,我们还将“**(阅读更多)**”链接替换为完整的文章文本,并使用 Ajaxy HoverMenu。将 AJAX Control Toolkit 中也找到的 `HoverMenuExtender` 控件拖放到 DataList 的 Item Template。然后将 HyperLink 控件放到那里,并将 `NavigateUrl` 属性数据绑定到项目的链接值
<asp:HyperLink ID="Popup" runat="server" BackColor=Beige BorderColor=DarkKhaki
Text="View Original Item" NavigateUrl='<%# Eval("link") %>'/>
<ajaxT:HoverMenuExtender TargetControlID="panelHeader" runat="server"
PopupControlID="Popup" PopupPosition=Right OffsetX=15 />
最后,我们构建并运行应用程序以查看我们的更改是否有效。
在 Linux 上部署
到目前为止,我们已将 Java 构建目标部署到在 Windows 本地运行的 Grasshopper 捆绑 Tomcat Web 应用程序服务器上。现在,让我们兑现承诺,在 Linux 上运行此 Web 应用程序。这是一个简单的过程。
首先,我们将构建 RSSReader 的 `Release_Java` 配置,以创建适合部署的 WAR 文件。发布配置的默认设置启用**完整部署包**——一个 Grasshopper 特定的项目属性——并告知构建系统生成一个 Web Archive (WAR) 文件,这是一个包含所有所需资源(HTML、JAR、图像文件等)的压缩档案。
然后,我们将通过 Tomcat Manager 的 Web 管理界面将 WAR 文件上传到 Linux 上的 Tomcat。上一步中创建的 WAR 文件位于本地 Tomcat 的安装目录中,默认位置为 C:\Program Files\Mainsoft for Java EE\jakarta-tomcat\webapps\。
![]() |
|
图 2:在 Linux 上运行的 RSS 阅读器 |
这是在 Linux/Apache Tomcat 上托管的 ASP.NET AJAX 应用程序的屏幕截图
摘要
本文向您展示了如何使用 ASP.NET AJAX 为 Linux 构建应用程序,这对于多平台部署来说是一个非常实用的工具。然而,我们在这里只触及了 Grasshopper 启用 .NET-Java 互操作性的全部潜力的表面。释放您的创造力,利用 Visual Studio 开发和 ASP.NET 框架的强大功能,将 Web 应用程序部署到开源 Web 应用程序服务器。
了解更多信息,请访问 dev.mainsoft.com。