逐步改用 IronPython 開發你的 ASP.NET 應用程式

來源:互聯網
上載者:User

IronPython for ASP.NET 的 CTP 已經發布有一段時間了,我們在看了官方提供的範例之後,相信對一個 ASP.NET 應用程式中完全使用 IronPython 開發還是有一些擔心的。畢竟目前僅僅是 CTP 版本,並且缺乏 Visual Studio 的 Intellisence 的支援,在調試方面也有一些不足。

不過,今天我做了一些實驗,發現可以在已有的 C# 的 ASP.NET 項目中引入 IronPython,而不會影響到原先程式的功能,這樣,我們就可以混合使用 C#, IronPython 兩種語言來開發 ASP.NET 了。

具體的步驟是這樣的:

1. 首先,我們用通常的方式建立一個 C# 的 ASP.NET website 項目,或者 Web Application Project. 這兩種我都做過實驗,並且都可以支援 IronPython. 下面我就拿 Web Application Project 來舉例。

2. 然後,添加對 IronPython.dll, IronMath.dll, Microsoft.Web.IronPython.dll 三個 dll 的引用。這三個 dll 都可以在官方發布的 IronPython for ASP.NET 例子裡找到。

3. 在 web.config 中添加對 IronPython 語言的一些支援。

<configuration>
  <appSettings/>
  <connectionStrings/>

  <system.web>
    <!-- 修改頁面的 Parser 以便支援 IronPython -->
    <pages pageParserFilterType="Microsoft.Web.IronPython.UI.NoCompileCodePageParserFilter" compilationMode="Auto" />

    <authentication mode="Windows" />

    <compilation debug="false">
      <assemblies>
        <add assembly="Microsoft.Web.IronPython, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
      </assemblies>
    </compilation>

    <!-- 添加 httpModule -->
    <httpModules>
      <add name="DynamicLanguageHttpModule" type="Microsoft.Web.IronPython.DynamicLanguageHttpModule"/>
    </httpModules>

    <!-- 添加用於處理 python 程式的 http handler -->
    <httpHandlers>
      <add path="Web_*.py" verb="*" type="Microsoft.Web.IronPython.SimpleHandler" />
      <add path="*.py" verb="*" type="System.Web.HttpForbiddenHandler" validate="true" />
    </httpHandlers>
  </system.web>
</configuration>

上面的檔案中我做了一點注釋。關於詳細的原理描述,請參閱我翻譯和摘要的白皮書。想瞭解詳細原理的朋友,可以用 Reflector 查看 Microsoft.Web.IronPython.dll,會有很多收穫的。

4. 在項目下添加 App_Script 檔案夾。

然後你就可以在這下面添加一些 .py 檔案了。其作用就像 App_Code 一樣。

在這個 demo 裡面,我寫了一個簡單的 foo.py:

def Foo():
    return 'foo'

5. 現在,可以用 IronPython 建立頁面了。但是由於當前建立的是 C# 類型的項目,我們有一些動作需要手工來調整。
首先添加一個普通的 WebForm,比如命名為 ipy1.aspx, 然後將其 .aspx.cs 和 .aspx.designer.cs 檔案刪除。下面我們需要對 ipy1.aspx 的 Page Directive 做一些調整:

<%@ Page Language="IronPython" Codebehind="ipy1.aspx.py" %>

接下來,我們手工給這個頁面附加後台代碼檔案 ipy1.aspx.py,需要注意的是,用 IronPython 建立的 aspx 頁面和後台代碼檔案之間,並不是類的繼承關係。關於這一點,在白皮書中也有詳細的描述。
這個檔案的內容如下:

from System import Random
import foo

def Page_Load():
    Response.Write(foo.Foo())

這裡我們引用了剛才定義的 foo.py 模組中的函數。

6. 開啟 IE 看一下:

同時,在這個項目下用 C# 編寫的程式不受任何影響:

通過上面的例子可以看到,在我們對 IronPython for ASP.NET 仍然不夠放心的情況下,可以通過這種方法,在已有的應用程式中逐步使用 IronPython,來簡化一些常規頁面開發過程!(毫無疑問,IronPython 是簡單的,不是嗎? )

這裡附上例子的代碼

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.