65.9K
CodeProject 正在变化。 阅读更多。
Home

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

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2008年4月10日

CPOL

9分钟阅读

viewsIcon

29766

作者 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,一个由 MainsoftMono 开源社区合作构建的基于 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 ToolkitASP.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 应用程序项目类型

  1. 在 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。

  2. 在同一解决方案中打开 RSS 阅读器 Web 站点。

  3. 将所有项目文件(引用除外)从 Web 站点拖放到 **RSSReader** 项目,覆盖任何默认项。

  4. 右键单击解决方案资源管理器中的 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**。

Adding a Java Reference

图 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\

The RSS Reader Running on Linux

图 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

© . All rights reserved.