在 10 分钟内使用 Visual Studio .NET IDE 创建你的第一个 Linux 应用程序!





0/5 (0投票)
2005年6月27日
8分钟阅读

50747
本文介绍了如何使用 Visual Studio .NET® IDE 编写一个在 Linux® 上运行的股票行情 ASP.NET Web 应用程序。
概述
Visual MainWin® for J2EE™(又名 Grasshopper)是 Mainsoft 的一款创新产品,它允许你利用 Visual Studio .NET 的开发效率来发挥 J2EE 的强大功能。由于 J2EE 的跨平台能力,你甚至可以使用 C# 和 ASP.NET 编写应用程序,并将其部署到运行在 Linux 上的 J2EE 服务器。
本文介绍了如何使用 Grasshopper 构建一个简单的 ASP.NET 应用程序,该应用程序可以调用股票行情 Web 服务,并通过在 Linux 上运行的 Tomcat 上的 Web 窗体进行展示。
应用程序
|
|
|
图 1. 你的 ASP.NET 应用程序正在 Linux 上运行! |
你可以在图 1 中看到该应用程序。
该应用程序包含一个包含数据网格的单个 Web 窗体。该窗体调用 XMethods.Net 的公共 Web 服务,该服务提供延迟 20 分钟的股票行情。数据网格不能直接绑定到 Web 服务,它只能绑定到 DataSet 对象。此外,Web 服务一次只能提供一个股票代码的信息。因此,该应用程序会多次调用 Web 服务,获取检索到的数据并将其存储在 XmlDocument 中,然后从该文档的内容生成一个 Grid 可以绑定的 DataSet。
因此,本示例演示了以下原则:
-
通过代理类消耗 Web 服务
-
XmlDocument 管理
-
数据绑定
-
ADO.NET 数据集
-
ASP.NET 网格控件
这涵盖了 .NET 框架提供的部分技术。继续阅读,了解如何使用它们来构建 Linux 应用程序。
构建应用程序
步骤 1。
|
|
|
图 2. 包含网格的 ASP.NET Web 窗体设计器 |
你需要做的第一件事是创建一个新的 Visual MainWin ASP.NET Web 应用程序,其中包含一个带有 Data Grid 的 WebForm。使用 Visual Studio .NET,在安装了 Visual MainWin for J2EE 后,文件 > 新建项目对话框将包含两个新的项目类型 – Visual MainWin C# 和 Visual MainWin VB。请务必在这些项目类型之一中创建你的 ASP.NET Web 应用程序,并使用你选择的语言。在本文中,我们使用 C# 版本。
Web 窗体的布局如图 2 所示。它包含一个已设置样式和单个按钮的网格。
你可以使用 IDE 中的属性编辑器来更改网格的物理属性,使其在外观上更具吸引力。这些设置在你的 Linux 实现中也能正常工作!除了根据需要放置、设计和调整控件的大小外,在此步骤中你无需执行其他操作。
步骤 2。
|
|
|
图 3. 从 XMethods 添加股票行情 Web 服务 |
向 XMethods.net 发布的延迟股票行情服务添加 Web 引用。在 Visual Studio .NET 中,通过在解决方案资源管理器中选择“Web 引用”,选择“添加 Web 引用”,然后输入以下 WSDL URL 来完成:
http://services.xmethods.net/soap/urn:xmethods-delayed-quotes.wsdl
为了与本文中的代码片段保持一致,你应该将其命名为“QuoteService”。你的屏幕应该与图 3 所示的类似。
如果你想知道自动生成的 Web 服务代理是否能在 Linux 下工作 – 答案是“是”,因为 J2EE 上实现了完整的 SOAP Web 服务框架,并在编译你的代码以用于 J2EE 时使用。
步骤 3。
在编写处理程序的代码之前,你需要进行一些初始设置。首先,在 QuoteList.aspx.cs 代码的顶部添加此行:
using System.Xml;
然后,添加一个 DataGrid 和一个 Button 控件,分别命名为“dgQuoteList”和“bRefresh”。
然后,在页面的声明部分(紧跟在 public class QuoteList : System.Web.UI.Page()
下面)添加以下声明:
protected string[] strTickers; protected string[] strValues;
为了演示目的,应用程序将硬编码使用六个股票代码。这在 Page_Load()
函数中设置如下:
private void Page_Load(object sender, System.EventArgs e) { // Put user code to initialize the page here strTickers = new String[6] {"IBM", "MSFT", "SUNW", "BEAS", "T", "KO"}; strValues = new String[6]; if(!Page.IsPostBack) { RefreshGrid(); } }
有三个主要函数需要编写才能使此应用程序正常工作。这些函数都使用 strTickers
和 strValues
数组。
RefreshGrid()
使用 strTickers 中的每个值作为 Web 服务的输入来调用 Web 服务,并将返回值存储在 strValues 数组的相应条目中。
private void RefreshGrid() { // This is a reference to the XMethods.NET Quote Web Service. // Use: http://services.xmethods.net/soap/urn:xmethods-delayed- // quotes.wsdl // to create a Web reference. QuoteService.netxmethodsservicesstockquoteStockQuoteService quote = new QuoteService.netxmethodsservicesstockquoteStockQuoteService(); // Go through the array of Ticker strings to call the Web // service to get the appropriate values. This is done synchronously // for simplicity. for(int lp=0;lp<6;lp++) { strValues[lp] = quote.getQuote(strTickers[lp]).ToString(); } // Build an XML document based on the values in the //strings. // We do this because the grid is a data grid and needs to bind to a //DataSet. // One way of doing this is to use an XML document and ReadXML the //data on the DataSet object. BuildXML(strValues); }
BuildXML()
接收两个数组并将 XmlDocument
从它们构建出来。此 XmlDocument
构成了 Grid 绑定到的数据集的基础。
private void BuildXML(string[] strValues) { // Initialize a new blank XMLDocument XmlDocument xmlData = new XmlDocument(); // Create a root element XmlElement elRoot = xmlData.CreateElement("root"); // For each company for(int lp=0;lp<6;lp++) { // Create an element called 'quote' XmlElement elVal = xmlData.CreateElement("quote"); // Create an attribute called 'ticker' XmlAttribute attTicker = xmlData.CreateAttribute("ticker"); // Attribute val = ticker val attTicker.Value = strTickers[lp]; // Add the attribute to the element elVal.Attributes.Append(attTicker); // Set the value of the element to the current price elVal.InnerText = strValues[lp]; // Append the element to the root node elRoot.AppendChild(elVal); } // Append the root node to the XML Document xmlData.AppendChild(elRoot); // Render the data. RenderData(xmlData); }
RenderData()
从 XmlDocument
中的 XML 创建一个 DataSet
对象,并将网格绑定到此 DataSet
对象,从而将数据呈现在屏幕上。
private void RenderData(XmlDocument xmlData) { // The grid is a data grid needed to bind to a DataSet DataSet myDataSet = new DataSet(); // Use XmlNodeReader to read the XmlDocument XmlNodeReader xR = new XmlNodeReader(xmlData); // The DataSet reads the XmlNodeReader myDataSet.ReadXml(xR); // And is then bound to the grid and rendered dgQuoteList.DataSource = myDataSet; dgQuoteList.DataBind(); }
最后,你需要为按钮添加一个点击处理程序。最简单的方法是双击 IDE 设计器中的按钮,IDE 将创建处理程序并带你到处理程序的代码。编辑此代码使其看起来像这样:
private void bRefresh_OnClick(object sender, System.EventArgs e) { RefreshGrid(); }
你可以在下载文件中看到每个函数。成功编码并构建 ASP.NET Web 窗体后,就可以执行它了。你将看到与图 1(上方)所示类似的结果。
上述代码中使用的所有 .NET 类都具有 J2EE 实现,因此在用 Grasshopper 编译 J2EE 项目时无需修改即可工作。
你的 J2EE 项目工作区
|
|
|
图 4. Visual Studio .NET IDE 中的 J2EE C# 项目。 |
此项目的工作区与仅为 .NET 构建时使用的会有所不同。例如,有对 J2EE 以及 Grasshopper 支持的 .NET 命名空间的引用(参见图 4)。
另请注意,你的初始解决方案配置现在是 **Debug_Java** 和 **Release_Java**。你可以看到 Java™ 引用和要求是如何与 Visual Studio .NET 环境完美集成的 – 你无需走出你的舒适区!
在 Tomcat 中调试你的项目
|
|
|
图 5. 在 J2EE 上调试 ASP.NET。 |
你甚至可以使用 Visual Studio .NET 调试器在应用程序运行在 Tomcat 上时进行调试。要尝试一下,请在 Page_Load()
中的某一行设置一个断点。然后,确保 **Debug_Java** 被选为你的运行配置文件,然后开始执行。应用程序编译并执行后,你可以像在 IIS Internet Information Services (IIS) 下运行 ASP.NET 一样进行调试。有关详细信息,请参见图 5。
即使不再在 IIS 上运行,调试方式也与普通 .NET 应用程序完全相同。你可以检查变量、单步执行代码、在即时窗口中运行命令,甚至检查调用堆栈。当你对程序的执行满意后,就准备进入最后阶段:部署到 Linux。
画龙点睛:在 Linux 上运行你的 ASP.NET 应用程序。
此时,我们假设你已经在 Linux 服务器上运行了一个 Tomcat 实例。如果你还没有 Tomcat,有关获取和部署 Tomcat 的信息,请参阅 Mainsoft 的 开发者中心,其中充满了针对初学者 Linux 开发者的资源。
以下是你将要完成的简单步骤,以准备你的应用程序以部署和在 Linux 上执行:
步骤 1:生成 WAR 文件
|
|
|
图 6. 在 Visual Studio .NET 中创建 WAR 文件。 |
在 Visual Studio .NET IDE 的“生成”菜单中,有一个名为 **Deployment Packager** 的新选项。选择此选项以运行 WAR 文件向导(如图 6 所示)。
按照图中的选项进行勾选,然后单击“确定”。等待 Grasshopper 为你生成 WAR 文件。
步骤 2. 将 WAR 文件部署到 Linux
使用你的 Linux 服务器上的 Tomcat 管理控制台(http://:8080/manager/html)上传和部署你的 WAR 文件。请参阅 Tomcat 文档或 Mainsoft 的 Linux 工具箱 以获取更具体的详细信息。你甚至不需要重启 Tomcat – 它将上传 WAR 文件,将其放置在适当的目录中,并在浏览器中提供服务以供执行。
步骤 3. 执行!
|
|
|
图 7. 你的应用程序在 Linux 上运行! |
如果一切顺利,Tomcat 将会解压 WAR 文件到相应的目录中,并使其可执行。你应该知道的是,J2EE 应用程序服务器使用“上下文根”的概念,这有点类似于 IIS 中的虚拟目录。你的应用程序的上下文根是 WAR 文件的名称,所以如果你的 WAR 文件名为 linuxweb.war,那么你的上下文根现在是 **linuxweb**。你的应用程序的 URL 现在类似于:
https://:8080/linuxweb/QuoteService.asmx请参见图 7,其中显示了在 Linux Mandrake 10.1 上运行并在 Konqueror 浏览器中查看的示例。
结论
在本文中,你看到了将 C# 应用程序从 .NET 移植到 J2EE 并将其部署在 Tomcat 等 J2EE 容器中的简单性。此外,你还可以将你的 J2EE 应用程序,由于规范的可移植性,你能够在 Linux 上部署和运行它!因此,通过这几个简单的步骤,你就能够使用 C# 和 Visual Studio .NET 构建你的第一个 Linux 应用程序。这就是 Grasshopper 的强大之处,而且这仅仅是开始。你还有更多事情可以做,非常值得探索 Visual MainWin for J2EE 将为你带来的强大功能。立即 下载 一个副本亲自尝试吧!