ASP.NET FAQ

来源:互联网 发布:淘宝自动收货时间 编辑:程序博客网 时间:2024/06/05 04:08

在我学习ASP.NET编程并第一次在项目中使用它的这段时间中,我遇到了各种各样的问题。学习过程是痛苦并快乐着,每当我解决了一个问题之后,心中都会升起喜悦之情,也正是这种心情促使我不断学习,不断克服一个又一个问题,最终完成项目。起初并没有时间把碰到的问题记录并整理出来,但是我相信这是一个好的习惯,最后我决定从今天开始坚持这样做。

Q:

为什么我的HttpHandler在Visual Studio内置的ASP.NET Development Server中运行时,一切正常,但是部署到IIS服务器后,却是404错误?

A:

这是IIS服务器的编程模型搞的鬼。你的自定义HttpHandler一般都具有某个独一无二的后缀,这里以.png为例,要想让IIS能够正确的识别.png请求,那么你需要做下面三件事情:

定义.png请求的处理逻辑

在web.config文件中配置HttpHandler。例如。稍微说明一下,它表示PngImageHandler是定义png处理器的类,PngImageHandler类定义在App_Code文件夹中。

在IIS中为你的HTTP处理器映射自定义扩展。步骤如下:打开IIS信息服务,右击你的Web应用程序,选择属性。在"主目录"标签页中点击"配置"按钮。在弹出的应用程序配置对话框中,进行如下图所示的设置,可执行文件为aspnet_isapi.dll,不选择"检查文件是否存在"。

另外,限制字段可以是GET HEAD POST DEBUG四个动作。脚本引擎复选框使得可执行文件在没有执行权限得情况下运行于虚拟目录中,这种执行权限在虚拟目录向导或者虚拟目录属性对话框中标记为RUN SCRIPT。不选中"检查文件是否存在"这样我们不必创建任何新的.png文件。

注意:如果想要增加或者改变特定IIS应用程序的应用程序映射,可以在对应Web应用程序的这个对话框中进行修改。但是如果要改变整个站点的应用程序的应用程序映射,则必须在默认站点应用程序属性中进行修改。

配置起来是不是比较麻烦,其实还有一种方法,ASP.NET有一种内置的扩展.ashx可以省去所有的配置,唯一的区别就是你必须创建一个.ashx文件来封装你的代码。.ashx扩展唯一的缺点是不够灵活。

Q:

IIS服务器中的应用程序保护是什么意思?

A:

l LOW 与服务器运行在同样的地址空间,运行在IIS进程地址空间中的web应用程序可以使服务器完全崩溃,然而,运行在这里的web应用程序比共享的或者独立的web应用程序要快一些。

l MEDIUM 作为共享应用程序组的一部分运行。这一设置可以提供对IIS服务器的保护,但是一个错误的应用程序可以毁掉整个应用程序组。这是一个折中的设置。尽管运行在这里的web应用程序没有IIS进程中的快,但是如果崩溃的话可以自动重新启动。

l HIGH 应用程序获得自己的地址空间,它为可能运行在同一服务器上的其它应用程序提供了最强有力的保护。对于传统ASP应用程序来说,建议将此设置为High。在担心向服务器上安装一个新的应用程序而产生影响时,或者在建立一个与COM组件进行互操作的web应用程序时,都应该考虑将此设置改为High。

当运行设置为共享的web应用程序,它将作为IIS out-of-process pooled applications的一部分运行。当设置为独立的时,它作为独立的一项。

Q:

如何理解JavaScript函数的作用域

A:

在JavaScript中,每个函数都是某个对象的方法。哪个对象?简单的说,就是在函数体内this指向的对象。但是函数中的this引用的是哪个对象呢?我们分三种情况进行说明。

在页面中声明的普通的JavaScript函数称为全局函数。在全局函数的函数体内,this关键字所引用的是全局对象。在HTML DOM中,全局对象的window属性就是全局对象本身。在全局函数中,this指向这个window对象。

处理DOM事件的函数称为DOM事件处理器。在事件处理器的内部,this关键字引用的是关联事件的DOM元素。如果你订阅了某个button元素的click事件,事件处理器中this所指向的对象就是button元素。如果你有一个div元素,它带有一个click事件的事件处理器,并且它的内部有一个span元素,单击span元素将会使click事件冒泡。即使实际上是span触发了事件,但是this指向的是div元素。

如果函数与new运算符一同使用,这个函数称为构造器。在JavaScript中,构造器是用来创建自定义对象的。在构造器内部,this关键字指向新创建的实例。如果新创建的实例定义了方法,方法体中的this指向实例本身。

Q:

在ASP.NET中,如何引入外部JavaScript脚本文件?

A:

1 通过ScriptManager引入外部JavaScript文件

2 直接在.aspx文件中引入 插入脚本(例如在…中)

Q:

Microsoft ASP.NET AJAX如何定义抽象方法?

A:

在ASP.NET AJAX中,为了强制派生自一个抽象类的某个具体类改写抽象类中的抽象方法,每个抽象方法的实现体只是简单的抛出一个异常:

throw Error.notImplemented();

Q:

什么是身份验证和授权?ASP.NET有哪些身份验证方式及其区别?

A:

身份验证(authentication)是确定用户身份的过程。在用户通过了身份验证之后,系统就可以确定该用户是否有权继续操作。如果没有进行身份验证就不能进行实体的授权。

授权是确定已验证的用户是否有权访问应用程序中的某个部分,某个点,或只访问应用程序提供的特定数据集。对用户和组进行身份验证和授权后,就可以根据用户类型配置或定制站点。

IIS Web服务器处理所有入站的HTTP请求,只有页面具有特定的文件扩展名(例如.aspx),IIS才会把请求转发给ASP.NET引擎。

在ASP.NET中,我们可以利用五种身份验证方式,它们分别为基于Windows的身份验证,Passport身份验证和表单身份验证。

1 基于Windows的身份验证

基于Windows的身份验证在ASP.NET应用程序所在的Windows服务器和客户机之间处理。请求直接发送给IIS进行验证过程。IIS以如下方式进行验证:基本身份验证,集成的Windows身份验证,或者摘要式身份验证。IIS验证完成以后,ASP.NET就可以使用已验证的身份授予访问权限。这也是默认设置。这种类型的身份验证在局域网环境中非常有用。

使用基于Windows的身份验证首先需要创建一些用户和组。(一般在域控制器上创建用户)

如果用户在本地计算机上登录为一个域用户,在访问该域中的网络计算机时,就不再需要再次验证。Windows是支持该验证模式的唯一系统。

虽然基本身份验证,集成的Windows身份验证,摘要式身份验证同属于Windows身份验证但是它们也具有一些细微的差别:

1.1 集成的Windows身份验证以前称为NTLM或Windows NT Challenge/Response身份验证。这个验证模式要求客户机给驻留ASP.NET应用程序的服务器发生其凭证的散列,以此证明其身份。除了MS的Active Directory之外,如果客户机使用的是IE5或更高版本,还可以使用Kerberos。

1.2 基本身份验证是HTTP规范的一部分,所以大多数浏览器都支持它。它的缺点是把用户名和密码作为明文传送给服务器,因此必须与SSL一起使用。

应用方法:

打开IIS Web站点的Properties对话框,选择Directory Security选项卡,单击匿名访问和身份验证控制框中的编辑按钮,选中上面的Basic authentication。

1.3 摘要式身份验证加密传送用户名和密码,但是它需要有一个Windows域控制器而且浏览器必须遵循HTTP1.1规范。

2 Passport身份验证

这是微软提供的一个集中式身份验证服务,它为成员站点提供了一个登录和核心配置服务。但是从2004年末开始不再强调这种验证模式。

3 基于表单的身份验证

未通过身份验证的请求使用HTTP客户端重定向功能重定向到一个HTML登录窗体上。用户名和密码使用明文传送,除非使用了SSL。这种验证方式最为灵活,使用的也最为普遍。

表单身份验证的配置十分简单,只需要修改应用程序的web.config文件,例如

后记:

哥哥,希望你一路走好,请相信我会尽我所能照顾好姨和姨父的...

2008-8-20

Powered by Zoundry

原创粉丝点击