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 是简单的,不是吗? :) )

这里附上例子的代码

出处:http://www.cnblogs.com/RChen/archive/2006/12/02/cs_ipy_aspnet.html

逐步改用 IronPython 开发你的 ASP.NET 应用程序的更多相关文章

  1. 构建高性能的ASP.NET应用程序

    看见大标题的时候,也许各位看官会自然而然的联想到如何在设计阶段考虑系统性能问题,如何编写高性能的程序代码.关于这一点,大家可以在MSDN和相关网站上找到非常多的介绍,不过大多是防患于未难,提供的是在设 ...

  2. (0)ASP.NET Core 简单介绍 和开发环境搭建 - ASP.NET从MVC5升级到MVC6

    ASP.NET从MVC5升级到MVC6 总目录 ASP.NET Core 首先,ASP原本只是一种技术,这种技术从上个世纪90年代就有了. Active Service Page 和 Java Ser ...

  3. 开发现代ASP.NET应用程序

    新思想.新技术.新架构——更好更快的开发现代ASP.NET应用程序(续1)   今天在@张善友和@田园里的蟋蟀的博客看到微软“.Net社区虚拟大会”dotnetConf2015的信息,感谢他们的真诚付 ...

  4. 用VSCode开发一个基于asp.net core 2.0/sql server linux(docker)/ng5/bs4的项目(1)

    最近使用vscode比较多. 学习了一下如何在mac上使用vscode开发asp.netcore项目. 这里是我写的关于vscode的一篇文章: https://www.cnblogs.com/cgz ...

  5. 微信开发】【Asp.net MVC】-- 微信分享功能

    [微信开发][Asp.net MVC]-- 微信分享功能 2017-01-15 09:09 by stoneniqiu, 12886 阅读, 15 评论, 收藏, 编辑 内嵌在微信中的网页,右上角都会 ...

  6. C# -- HttpWebRequest 和 HttpWebResponse 的使用 C#编写扫雷游戏 使用IIS调试ASP.NET网站程序 WCF入门教程 ASP.Net Core开发(踩坑)指南 ASP.Net Core Razor+AdminLTE 小试牛刀 webservice创建、部署和调用 .net接收post请求并把数据转为字典格式

    C# -- HttpWebRequest 和 HttpWebResponse 的使用 C# -- HttpWebRequest 和 HttpWebResponse 的使用 结合使用HttpWebReq ...

  7. 在CentOS7 开发与部署 asp.net core app笔记

    原文:在CentOS7 开发与部署 asp.net core app笔记 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/lihongzhai/art ...

  8. ASP.NET开发实战——(一)开篇-用VS创建一个ASP.NET Web程序

        本文是本系列文章第一篇,主要通过建立一个默认ASP.NET MVC项目来引出与ASP.NET MVC相关的功能,由于ASP.NET MVC一个简单的模板就具备了数据库操作.身份验证.输入数据校 ...

  9. .NET Core开发日志——从ASP.NET Core Module到KestrelServer

    ASP.NET Core程序现在变得如同控制台(Console)程序一般,同样通过Main方法启动整个应用.而Main方法要做的事情很简单,创建一个WebHostBuilder类,调用其Build方法 ...

随机推荐

  1. maven3 org.codehaus.plexus.classworlds.launcher.launcher 找不到或无法加载主类

    maven3 org.codehaus.plexus.classworlds.launcher.launcher 找不到或无法加载主类 嗯,网上很多资料说是路径的问题,确实是有可能是路径的问题,而且还 ...

  2. 页游手游服务器(五)sql缓存层

    sql的通用缓存,是实现最麻烦的一部分,对于查询结果的缓存,主要有如下的结构来缓存: cache tablename--player statement--select * from player w ...

  3. Swift编程语言学习6—— 闭包

    闭包是自包括的函数代码块,能够在代码中被传递和使用. Swift 中的闭包与 C 和 Objective-C 中的代码块(blocks)以及其它一些编程语言中的 lambdas 函数比較类似.   闭 ...

  4. js实现粘贴板复制

    <a href = '#' onclick ='javascript:window.clipboardData.setData('text','${form.param}');alert('クリ ...

  5. ssm框架与shiro的整合小demo,用idea开发+maven管理

    shiro安全框架是目前为止作为登录注册最常用的框架,因为它十分的强大简单,提供了认证.授权.加密和会话管理等功能 . shiro能做什么? 认证:验证用户的身份 授权:对用户执行访问控制:判断用户是 ...

  6. Redis持久化——RDB(一)

    核心知识点: 1.RDB:将当前数据生成快照保存到硬盘 2.手动触发 save:会阻塞Redis服务器直到RDB完成. bgsave:执行fork创建子进程,由子进程负责RDB操作,阻塞只发生在for ...

  7. php面向对象加载类

    php加载类: 新建php文件用驼峰法命名类名: 每个单词首字母大写,后面加.class.php表示这是php类文件.例如: ClubMember.class.php 若为纯php页面,<?ph ...

  8. 3.26课·········window.document对象

    1.Window.document对象 一.找到元素:    docunment.getElementById("id"):根据id找,最多找一个:    var a =docun ...

  9. iOS 当前应用或者浏览器中 唤起 手机其他应用

    这种方法 是 产品很常见的需求,关键 是在info.plist  URL types 设置对应属性 比如 里面 子属性 URL identifier  设置成 bundle id   //设置应用指向 ...

  10. ubuntu配置jdk环境

    简单记录如下: 1. 下载JDK并解压后,复制到想要放置的目录,本文以“/usr/lib/jdk”为例: 2. 编辑配置文件,可以是“/etc/profile”或者“~/.bashrc”. 输入命令“ ...