全面介绍开发ASP.NET

开发 后端
本文全面介绍开发ASP.NET,很多人说C++无法开发ASP.NET,ANSI C++的确不能,但C++/CLI则可以,事实上,任何.NET下的语言都可以开发ASP.NET。

在Visual Studio .NET 2002刚出来时,我就曾经听过同事说过他用C++写过ASP.NET,不过由于当时才刚刚学C#,还不会C++,所以也没问他是怎么写的,一直到最近开始学C++,发现在Visual Studio 2005可以用C++/CLI开发Windows Form,但却无法开发ASP.NET,实在令人遗憾。在网路上也只在Code Project谈到在Visual Studio .NET 2002下用Managed C++写ASP.NET(ASP.NET with Managed C++),但Managed C++和C++/CLI的语法不太一样,原本的范例无法compile成功,经过一段研究之后,终于找到了用C++/CLI撰写ASP.NET的方式。在这篇文章中,我将一步步的介绍如何用C++/CLI开发ASP.NET程式。

Step 1:
建立Web Site
首先,建立一个新的Web Site,由于Visual Studio 2005在ASP.NET没支持C++,所以建立Web Site时,先随便选一个语言建立。

建立Web Site 

Step 2:
建立Web Form
建立一个Web Form名为HelloWorld.aspx,请不要选择Place code in separate file,这样Visual Studio 2005会将Event Handler放在aspx档中,可以让aspx.cpp省掉event宣告的程式。

建立Web Form 


Step 3:
加入GUI
使用Web Form Designer做出以下的介面。

使用Web Form Designer 

Step 4:
修改HelloWorld.aspx
在Page Directive部分,将Language=”C#”删除,加上AutoEventWireup="true" Inherits="HelloWorld",HelloWord为C++的Class名称。也要将<script runat="server"></script>部分删除。

  1. <%@ Page AutoEventWireup="true" Inherits="HelloWorld" %> 
  2.  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
    > 
  4. <html xmlns="http://www.w3.org/1999/xhtml"> 
  5. <head runat="server"> 
  6. <title>Untitled Page</title> 
  7. </head> 
  8. <body> 
  9. <form id="form1" runat="server"> 
  10. <div> 
  11. Using C++/CLI in ASP.NET<br /> 
  12. <br /> 
  13. <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" /> 
  14. <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label></div> 
  15. </form> 
  16. </body> 
  17. </html> 

Step 5:
建立C++ project
在左侧选择CLR,此为.NET platform的Project,右侧选择CLR Empty Project即可,切记不要选择Class Library,这样会多出很多我们不需要的档案,而且***我们也不会用Visual Studio 2005来compile ,会使用Command Prompt的方式compile。

选择CLREmptyProject


Step 6:
建立HelloWorld.aspx.cpp。
左侧选择Code,右侧选择C++ File(.cpp)

建立HelloWorld 

Step 7:
加入C++/CLI程序
C++/CLI对ANSI C++做了些扩充,为了和C++内建的型别与Class做区别,Managed的Class需加上ref modifier,而Managed的Object要加上^。最重要的,IDE支援Intellisense方式写ASP.NET。

C++/CLI / HelloWorld.aspx.cpp

  1. #using <system.dll> 
  2. #using <mscorlib.dll> 
  3. #using <system.web.dll> 
  4.    
  5. using namespace System;  
  6. using namespace System::Web::UI::WebControls;  
  7.    
  8. public ref class HelloWorld : public System::Web::UI::Page {  
  9. protected:  
  10. Button ^Button1;  
  11. Label ^Label1;  
  12.  
  13. public:  
  14. void Button1_Click(Object ^sender, EventArgs ^e) {  
  15. this->Label1->Text = "Hello World";  
  16. return;  
  17. }  
  18. }; 

Step 8:
编译程式
使用Visual Studio 2005 Command Prompt编译C++/CLI。

编译C++/CLI

Step 9:
Deploymemt
***只要将HelloWorld.aspx放到c:\Inetpub\wwwroot\下,HelloWorld.dll放到c:\Inetpub\wwwroot\bin\下,就完成deployment。

Conclusion
很多人说C++无法开发ASP.NET,ISO C++的确不能,但C++/CLI则可以,事实上,任何.NET下的语言都可以开发ASP.NET,虽然Visual Studio 2005工具不见的支援,但只要透过一些小技巧,你依然可以用妳喜欢的.NET语言开发ASP.NET。

(01/27/2007更新)
这篇文章得到很大的回响,大概因为这是世界上***篇使用C++/CLI开发ASP.NET的讨论,不过回到现实,真的该用C++开发ASP.NET吗?

老实说,C++/CLI开发ASP.NET真的比较麻烦,而且用C++/CLI在执行速度也不会比C#快多少,实务上还是建议使用C#开发Web应用程式,用C++开发系统程式(驱动程式,kernel..),毕竟两者定位不同。

若你真的还是很坚持非用C++不可,以下是我的建议:
采用多层式架构
1.Presentation Layer : ASP.NET部分用C#写,主要是Visual Studio 2005工具支援完整。
2.Business Layer / Data Access Layer:这里可以用C++/CLI写,这里不牵涉到UI,只牵涉到逻辑和资料,你可以在这里尽情的发挥C++在OOP,STL,GP上的优势。
3.Database :这里还是要用SQL Server或Oracle。

我这篇文章,主要也是证明C++还是可以写ASP.NET,但并没有推荐大家一定要这样写,主要还是Visual Studio 2005的支援度不够,写起来不方便,若下一个版本Microsoft愿意让Visual Studio直接支援C++/CLI开发ASP.NET,若你又是C++忠实信徒,那就真的推荐用C++开发ASP.NET了。

另外直得一题的是,C++要开发ASP.NET,用的是C++/CLI而非ISO C++,虽然C++/CLI包含了所有ISO C++,但还有一些阔充的语法,如pointer变成^, reference变成%...等,当然C++/CLI也是相当有趣的主题,值得一学。

【编辑推荐】

  1. ASP.NET开发技巧之Theme功能浅析
  2. 详解ASP.NET动态编译
  3. Apache支持ASP.NET方法浅析
  4. 浅谈ASP.NET服务器标准控件
  5. ASP.NET中SQL Server数据库备份恢复浅析
责任编辑:佚名 来源: 中国IT实验室
相关推荐

2009-07-29 10:35:51

ASP.NET缓存

2009-08-04 15:58:06

ASP.NET动态控件

2009-07-21 13:30:59

JSP技术ASP.NET

2012-09-18 11:02:10

ASP.NETC#Web Forms

2009-07-23 14:17:41

2009-07-29 10:02:49

ASP.NET上传

2009-07-21 10:40:36

ASP.NET Pro

2009-07-29 09:14:36

ASP.NET网站

2009-09-10 14:02:08

LINQ ASP.NE

2009-07-20 16:12:21

ASP.NET Fra

2009-07-29 17:26:39

ASP.NET页面

2009-07-27 17:00:29

ASP.NET主机

2009-07-28 17:41:54

ASP.NET工具

2009-08-19 09:23:40

ASP.NET Rou

2009-07-22 16:05:34

ASP.NET AJA

2009-07-29 17:23:17

ASP.NET表单

2009-07-29 09:53:24

ASP.NET异常管理

2009-07-21 15:11:14

ASP.NET Rou

2009-07-24 13:39:03

ASP.NET弹出窗口

2009-08-03 17:35:07

ASP.NET WebASP.NET编程工具
点赞
收藏

51CTO技术栈公众号