IIS 5.0Internet Explorer 6.0IIS 5.1IEIIS 6.0SQL Server 2000DBAIISVisual Studio .NET 2003.NET 1.1HTMLIntermediateDevVisual StudioSQL ServerSQLWindows.NETLinuxC#
ASP.NET 报表入门套件从 Windows 移植到 Linux(Race to Linux)






3.30/5 (4投票s)
2005 年 10 月 1 日
5分钟阅读

34197

184
使用 Mainsoft 的 Grasshopper 将 ASP.NET 报表入门套件从 Windows 移植到 Linux
引言
这个场景是从 Windows 移植一个 ASP.NET 入门套件到 Linux,使用你选择的跨平台工具(如 Grasshopper、Mono、PHP、Macromedia 等)。我们可以使用现有的 SQL Server(ASP.NET 报表已支持)或任何其他数据库,如 MySQL、PostgreSQL 等。
我的选择
在 4 个选项中,我决定使用 Grasshopper。虽然 Mono 也是一个非常好的工具。
报表入门套件已被证明可以与 SQL Server 配合使用,我不想在它没有坏的情况下修复它。我直接选择使用托管 SQL Server,而不是迁移到 MySQL、PostgreSQL 等。
Grasshopper 设置
- 从 http://dev.mainsoft.com/Default.aspx?tabid=28 下载并安装 Grasshopper。Tomcat 作为 Grasshopper 安装的一部分进行安装。
- 从 http://dev.mainsoft.com/Default.aspx?tabid=28 下载并安装“目录服务”和“绘图”的 Beta 组件文件。不要忘记 使用 System.DirectoryServices 模块更新 Grasshopper 运行时。尽管它们是 Beta 版,但它们对我来说工作得很好。这样做将节省一些在构建过程中搜索错误的 Google 时间。虽然目录服务对于此项目不是必需的,但它可能对于未来的项目是必需的,所以你可以考虑下载它。
报表入门套件设置
- 从 http://www.asp.net/Default.aspx?tabindex=8&tabid=47 下载并安装 ASP.NET 报表入门套件。
- 在安装报表入门套件时,请使用默认选项。
我们的 Windows 到 Linux 移植
- 启动 Tomcat(转到 开始 -> 所有程序 -> Visual MainWin for the J2EE(TM) platform 并点击 Start Tomcat)。
- 打开报表入门套件 Visual Studio 解决方案(转到 开始 -> 所有程序 -> ASP.NET Starter Kits -> ASP.NET Reports (CSVS) 点击 ASP.NET Reports Starter Kit (CSVS).sln)。
- 右键单击 ReportsCSVS 项目并选择“Generate J2EE project”。将打开一个向导,请按照以下步骤操作...
- 点击 Next 按钮。
- 选中“Save a copy of the original solution file”并点击 Finish 按钮。
- Grasshopper 需要几分钟时间,请等待其完成。
- 一个新的项目(ReportsCSVS.J2EE)将被添加到当前解决方案中。
- 右键单击 ReportsCSVS.J2EE 项目并选择 Build,等待 Java 转换完成(大约需要一两分钟)。
- 现在你可能会注意到一些警告,会有一些小问题,我们将在下面讨论。一旦我们修复了所有问题,我们将重新构建解决方案以使应用程序正常工作。
挑战(我喜欢称之为问题)
我们将处理在 Windows 到 Linux 移植过程中出现的问题。实际上,我们在构建和测试时会发现并解决所有问题。对于这个项目,最容易解决的问题是构建时错误或警告。
- 幸运的是,没有构建时错误,但我们有 3 个警告。
warning JC8000: Not Implemented Element 'customErrors' warning JC8000: Not Implemented Element 'sessionState' warning JC8000: Not Implemented Element 'pages'
所有这些警告都来自 web.config 文件,原因是因为 customErrors、sessionState 和 pages 是不受支持的元素。解决方案是在 web.config 中注释掉它们。 - 现在一切似乎都已成功编译,当我运行应用程序时,我看到一个“JDBC”错误。我的连接字符串如下...
<add key="ConnectionString" value="server=localhost;Trusted_Connection=true;database=Reports" />
问题似乎是我的入门套件安装在 web.config 的 ConnectionString 的 property 中使用了“localhost”作为服务器。我不得不将其更改为“HOME”(我的家用电脑)。然后我发现它在使用“Trusted connection”时遇到连接问题,因为我的 SQL Server 没有给我任何权限。我将其连接字符串更改为使用用户名/密码而不是 Trusted connection,如下所示...<add key="ConnectionString" value="server=HOME;Trusted_Connection=true;database=Reports;user id=sa;password=" />
问题 #2 已修复。注意:看起来我们每次在 web.config 中更改 connectionString 都必须重新构建,否则应用程序不会生效。 - 一切似乎都运行良好,我运行了应用程序并开始测试每个报表。突然,Visual.aspx 没有正确显示饼图或条形图,它们是空白的图像。我开始调试应用程序(请参阅 http://dev.mainsoft.com/Default.aspx?tabid=32&src=ww_DebuggingProjects.html 来设置和开始调试),并发现有一个条件,只有当条件满足时,ChartGenerator.aspx 页面才会显示条形/饼图。当我仔细查看 ChartGenerator.aspx 中的条件时,它试图只向来自我们的 ReportsCSVS 站点的用户显示图表,如下所示。
if (Request.UrlReferrer != null &&((Request.UrlReferrer.Host.ToLower() == Environment.UserDomainName.ToLower()) || Request.UrlReferrer.Host.ToLower() == "localhost"))
我意识到实际上有一个我之前没注意到的第 4 个警告;它说...Not Implemented Property system.Environment.UserDomainName
我实现了这个条件,使用 Request.Url.Host 而不是 Environment.UserDomainName 属性,并重新构建了解决方案。 - 所有报表似乎都运行得非常好。在检查完所有报表后,我发现了另一个问题。这是一个小问题,Simple Report Overview 中的图像丢失了。起初我以为可能是另一个图表错误。但事实证明,它是一个 HTML 页面(Simple.htm)在使用一个图像。当我用浏览器(IE 6)查看时,这个图像丢失了。当我查看 img 标签时,我找不到错误,当我手动重写那一行时,我发现“SimpleOverview”图像的扩展名在 Docs/Simple.htm 文件中是“ .PNG”而不是“ .png”,这实际上是罪魁祸首。将其重命名为“ .png”解决了问题。Tomcat 可能区分大小写。
打包和部署
- 右键单击 ReportsCSVS.J2EE 项目并选择“Deployment Packager”,grasshopper 将创建一个 WAR 文件(J2EE 部署文件)。由于大小限制,我没有选择“Create self-contained package, which includes the whole Visual MainWin framework”(13MB)选项。请选择下图所示的选项...
我的项目在 bin_Java 文件夹中有两个 WAR 文件(ASPNET.StarterKit.Reports.war 和 ReportsCSVS.J2EE.war)和一个 ReportsCSVS.J2EE.deployWar 文件。 - Tomcat 管理控制台可用于上传和部署 WAR 文件以安装应用程序。根据应用程序服务器,你的项目与 Grasshopper 相关联,Grasshopper 可以自行部署应用程序。