ASP.NET 系列_08_编程指南(四)
?
ASP.NET 安全性
?
安全性
實(shí)現(xiàn)網(wǎng)站的安全性關(guān)系到如下幾方面:
- 身份認(rèn)證:即確認(rèn)用戶身份和真實(shí)性的過(guò)程。ASP.NET 中提供了四種類型的認(rèn)證:
- Windows 認(rèn)證
- 表單認(rèn)證
- 身份驗(yàn)證
- 自定義認(rèn)證
- 授權(quán):即定義并為特定用戶分配特定角色的過(guò)程。
- 機(jī)密性:包括對(duì)客戶端瀏覽器和網(wǎng)絡(luò)服務(wù)器的加密。
- 完整性:保持?jǐn)?shù)據(jù)完整性。例如,實(shí)現(xiàn)數(shù)字簽名。
基于表單的認(rèn)證
一般來(lái)講,基于表單的認(rèn)證包括編輯網(wǎng)絡(luò)配置文件以及具有驗(yàn)證碼的注冊(cè)頁(yè)面。
網(wǎng)絡(luò)配置文件可由如下代碼編寫(xiě):
上面的代碼段中提及的 login.aspx 頁(yè)面可能會(huì)包含如下代碼,包含驗(yàn)證用的用戶名和密碼在文件之后很難編碼進(jìn)去。
protected bool authenticate(String uname, String pass) {if(uname == "Tom"){if(pass == "tom123")return true;}if(uname == "Dick"){if(pass == "dick123")return true;}if(uname == "Harry"){if(pass == "har123")return true;}return false; }public void OnLogin(Object src, EventArgs e) {if (authenticate(txtuser.Text, txtpwd.Text)){FormsAuthentication.RedirectFromLoginPage(txtuser.Text, chkrem.Checked);}else{Response.Write("Invalid user name or password");} }注意到 FormsAuthentication 類是用于認(rèn)證過(guò)程的。
然而,不用寫(xiě)任何代碼 Visual Studio 就能夠通過(guò)網(wǎng)站管理工具輕松地?zé)o縫實(shí)現(xiàn)用戶創(chuàng)建、身份認(rèn)證和授權(quán)。這種工具能夠?qū)崿F(xiàn)用戶和角色的創(chuàng)建。
除此之外,ASP.NET 有現(xiàn)成的登錄控制系列,可以為你控制執(zhí)行所有的工作。
基于表單的安全性的實(shí)現(xiàn)
為了建立基于表單的認(rèn)證,你需要做到如下幾點(diǎn):
- 支持認(rèn)證過(guò)程的用戶數(shù)據(jù)庫(kù)
- 一個(gè)使用數(shù)據(jù)庫(kù)的網(wǎng)站
- 用戶賬戶
- 角色
- 用戶活動(dòng)和群體活動(dòng)的限制
- 一個(gè)顯示用戶狀態(tài)及其他信息的用戶頁(yè)面
- 允許用戶登錄、找回密碼、修改密碼的登錄界面。
為了創(chuàng)建一個(gè)用戶,需要采取以下步驟:
第一步:選擇網(wǎng)站 -> 配置 ASP.NET 以打開(kāi)網(wǎng)絡(luò)應(yīng)用管理工具。
第二步:點(diǎn)擊安全選項(xiàng)。
第三步:選擇 'Forms based authentication' 選項(xiàng),以將認(rèn)證類型設(shè)定為 'From the Internet'。
第四步:點(diǎn)擊 'Create Users'。如果你已經(jīng)創(chuàng)建了角色,你正好可以在這一步把角色分配給該用戶。
第五步:創(chuàng)建一個(gè)網(wǎng)站,并添加如下頁(yè)面:
- 歡迎頁(yè)面
- 登錄頁(yè)面
- 注冊(cè)頁(yè)面
- 找回密碼頁(yè)面
- 修改密碼頁(yè)面
第六步:在歡迎頁(yè)面的登錄部分設(shè)置一個(gè)登錄狀態(tài)控件。包含兩個(gè)標(biāo)準(zhǔn)框:LoggedIn 和 LoggedOut。
LoggedIn 有查看已經(jīng)登錄用戶的選項(xiàng),LoggedOut 內(nèi)有查看已經(jīng)退出用戶的選項(xiàng)。你可以在屬性窗口里改變登錄和退出的文本屬性。
第七步:在 LoginStatus 控件的下面設(shè)置一個(gè) LoginView 控件。你可以在此設(shè)置一些能反應(yīng)用戶是否已經(jīng)登錄的其他文本或其他控件(如超鏈接、按鈕等)。
這個(gè)控件有兩個(gè)標(biāo)準(zhǔn)框: Anonymous 框和 LoggedIn 框。選擇每種視圖,并為用戶編寫(xiě)一些文本,以作為選擇標(biāo)準(zhǔn)框時(shí)要顯示的內(nèi)容。文本應(yīng)該被放在如下圖中標(biāo)紅的區(qū)域。
第八步:由開(kāi)發(fā)者創(chuàng)建應(yīng)用用戶。你也許想要允許游客也能夠創(chuàng)建一個(gè)用戶賬戶。要實(shí)現(xiàn)這個(gè),你可以在 LoginView 控件下添加一個(gè)可以轉(zhuǎn)到注冊(cè)頁(yè)面的鏈接。
第九步:在注冊(cè)頁(yè)面設(shè)置一個(gè) CreateUserWizard 控件。設(shè)置這個(gè)控件的 ContinueDestinationPageUrl 屬性,以保證能夠轉(zhuǎn)到歡迎頁(yè)面。
第十步:創(chuàng)建登錄頁(yè)面。在這個(gè)頁(yè)面上設(shè)置一個(gè) Login 控件。 LoginStatus 控件會(huì)自動(dòng)地連接到登錄頁(yè)面。在網(wǎng)絡(luò)配置文件里做如下改動(dòng)可以改變這種默認(rèn)設(shè)置。
例如,如果你把你的登錄頁(yè)面命名為 signup.aspx ,可以在網(wǎng)絡(luò)配置文件的 部分添加如下幾行代碼。
<configuration><system.web><authentication mode="Forms"><forms loginUrl ="signup.aspx" defaultUrl = a€?Welcome.aspxa€ /></authentication></system.web> </configuration>第十一步:用戶經(jīng)常會(huì)忘記密碼。PasswordRecovery 控件幫助用戶重新獲得登錄這個(gè)賬戶。選擇登錄控件。打開(kāi)它的小標(biāo)簽,并選擇 'Convert to Template'。
通過(guò)自定義這個(gè)控件的用戶界面,在登錄按鈕下方放置一個(gè)超鏈接控件,這個(gè)控件應(yīng)該是能夠鏈接到找回密碼頁(yè)面的。
第十二步:在找回密碼頁(yè)面設(shè)置一個(gè) PasswordRecovery 控件。這個(gè)控件需要郵件服務(wù)器把密碼發(fā)送給用戶。
第十三步:在歡迎頁(yè)面的 LoginView 控件的 LoggedIn 框內(nèi)設(shè)置一個(gè)轉(zhuǎn)到修改密碼頁(yè)面的鏈接。
第十四步:在修改密碼頁(yè)面設(shè)置一個(gè) ChangePassword 控件,這個(gè)控件有兩種視圖:
現(xiàn)在運(yùn)行這個(gè)應(yīng)用,觀察不同的安全操作。
可以回到網(wǎng)絡(luò)應(yīng)用管理工具,點(diǎn)擊安全選項(xiàng),來(lái)創(chuàng)建角色。點(diǎn)擊 'Create Roles' 為這個(gè)應(yīng)用來(lái)創(chuàng)建一些角色。
點(diǎn)擊 'Manage Users',可以給用戶分配角色。
IIS 認(rèn)證:SSL
安全套接層(SSL)是用來(lái)確保安全連接的協(xié)議。通過(guò)使用 SSL,瀏覽器會(huì)把送到服務(wù)器的所有數(shù)據(jù)加密,并解密來(lái)自服務(wù)器的所有數(shù)據(jù)。與此同時(shí),服務(wù)器也會(huì)對(duì)倆字瀏覽器的所有數(shù)據(jù)進(jìn)行加解密。
安全連接的 URL 使用的是 HTTPS 協(xié)議而不是 HTTP 協(xié)議。一個(gè)很小的加鎖也會(huì)被使用了安全連接的瀏覽器顯示出來(lái)。當(dāng)瀏覽器使用 SSL 主動(dòng)地與服務(wù)器進(jìn)行交流時(shí),服務(wù)器會(huì)發(fā)送一個(gè)安全證書(shū)以對(duì)服務(wù)器本身進(jìn)行認(rèn)證。
要想使用 SSL ,你需要從一個(gè)可以信任的認(rèn)證機(jī)構(gòu)(CA)購(gòu)買(mǎi)一個(gè)數(shù)字安全證書(shū),并在網(wǎng)絡(luò)服務(wù)器上安裝這個(gè)證書(shū)。以下是一些可以信任的,有較好名譽(yù)認(rèn)證機(jī)構(gòu):
- www.verisign.com
- www.geotrust.com
- www.thawte.com
SSL 是建立在所有主要的瀏覽器和服務(wù)器上的。要啟用 SSL,你需要安裝數(shù)字證書(shū)。不同數(shù)字證書(shū)的強(qiáng)度不同,是根據(jù)加密過(guò)程中產(chǎn)生的密鑰長(zhǎng)度而有所區(qū)別。密鑰越長(zhǎng),證書(shū)就越安全,連接也就越安全。
| 40 比特 | 支持大多數(shù)瀏覽器但是很容易破解。 |
| 56 比特 | 比 40 比特的更健壯。 |
| 128 比特 | 很難破解,但并不是所有的瀏覽器都支持。 |
?
?
ASP.NET Web 服務(wù)
?
Web 服務(wù)
Web 服務(wù)是一個(gè)基于網(wǎng)絡(luò)的功能,可被 web 應(yīng)用通過(guò) web 網(wǎng)絡(luò)協(xié)議獲取。web 服務(wù)開(kāi)發(fā)主要包含以下三方面:
- 創(chuàng)建 web 服務(wù)
- 創(chuàng)建代理服務(wù)器
- 使用 web 服務(wù)
創(chuàng)建 web 服務(wù)
一個(gè) web 服務(wù)就是一個(gè) web 應(yīng)用,基本形式為一個(gè)類包含可以被其他應(yīng)用調(diào)用的多個(gè)方法,它也采用隱藏代碼結(jié)構(gòu)例如 ASP.NET 網(wǎng)頁(yè),但它不存在用戶接口。
為了更好地理解這個(gè)概念讓我們創(chuàng)建一個(gè)提供股票價(jià)格信息的 web 服務(wù)。該服務(wù)的客戶端可以通過(guò)股票的標(biāo)簽查詢相關(guān)的名字和價(jià)格。為了簡(jiǎn)化這個(gè)例子,我們?cè)O(shè)置股票價(jià)格為固定值,保存在一個(gè)二維列表中。這個(gè) web 服務(wù)包含三個(gè)方法:
- 一個(gè)默認(rèn)的 HelloWorld 方法
- 一個(gè) GetName 方法
- 一個(gè) GetPrice 方法
采取以下步驟創(chuàng)建該服務(wù):
步驟 (1)?: 在 Visual Studio 中選擇 File -> New -> Web Site,然后選擇 ASP.NET Web Service。
步驟 (2)?: 一個(gè)名為 Service.asmx 的 web 服務(wù)文件和它的代碼被隱藏,Service.cs 會(huì)在這個(gè)工程的 App_Code 路徑下被創(chuàng)建。
步驟 (3)?: 將文件名修改為 StockService.asmx 和 StockService.cs。
步驟 (4)?: .asmx 文件簡(jiǎn)化了一個(gè) WebService 指令如下:
<%@ WebService Language="C#" CodeBehind="~/App_Code/StockService.cs" Class="StockService" %>步驟 (5)?: 打開(kāi) StockService.cs 文件,在該文件里生成的代碼是 Hello World 服務(wù)的基礎(chǔ)代碼。默認(rèn)的 web 服務(wù)代碼如下:
using System;using System.Collections;using System.ComponentModel;using System.Data;using System.Linq;using System.Web;using System.Web.Services;using System.Web.Services.Protocols;using System.Xml.Linq;namespace StockService{// <summary>// Summary description for Service1// <summary>[WebService(Namespace = "http://tempuri.org/")][WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)][ToolboxItem(false)]// To allow this Web Service to be called from script, // using ASP.NET AJAX, uncomment the following line. // [System.Web.Script.Services.ScriptService]public class Service1 : System.Web.Services.WebService{[WebMethod]public string HelloWorld(){return "Hello World";}}}步驟 (6)?: 修改文件內(nèi)的代碼增加一個(gè)存儲(chǔ)了各股票標(biāo)簽,名稱和價(jià)格的字符串的二維指針,并編寫(xiě)獲取股票信息的兩個(gè) web 方法如下;
using System;using System.Linq;using System.Web;using System.Web.Services;using System.Web.Services.Protocols;using System.Xml.Linq;[WebService(Namespace = "http://tempuri.org/")][WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]// To allow this Web Service to be called from script, // using ASP.NET AJAX, uncomment the following line. // [System.Web.Script.Services.ScriptService]public class StockService : System.Web.Services.WebService{public StockService () {//Uncomment the following if using designed components //InitializeComponent(); }string[,] stocks ={{"RELIND", "Reliance Industries", "1060.15"},{"ICICI", "ICICI Bank", "911.55"},{"JSW", "JSW Steel", "1201.25"},{"WIPRO", "Wipro Limited", "1194.65"},{"SATYAM", "Satyam Computers", "91.10"}};[WebMethod]public string HelloWorld() {return "Hello World";}[WebMethod]public double GetPrice(string symbol){ //it takes the symbol as parameter and returns pricefor (int i = 0; i < stocks.GetLength(0); i++){if (String.Compare(symbol, stocks[i, 0], true) == 0)return Convert.ToDouble(stocks[i, 2]);}return 0;}[WebMethod]public string GetName(string symbol){// It takes the symbol as parameter and // returns name of the stockfor (int i = 0; i < stocks.GetLength(0); i++){if (String.Compare(symbol, stocks[i, 0], true) == 0)return stocks[i, 1];}return "Stock Not Found";}}步驟 (7)?: 運(yùn)行 web 服務(wù)應(yīng)用給出了一個(gè) web 服務(wù)測(cè)試頁(yè)面,我們可以在該頁(yè)面測(cè)試服務(wù)方法。
步驟 (8)?: 點(diǎn)擊一個(gè)方法名字,確認(rèn)它是否在正確運(yùn)行。
步驟 (9)?: 為檢測(cè) GetName 方法,提供已經(jīng)被定義的股票標(biāo)簽中的一個(gè),正確的話會(huì)返回相關(guān)股票的名稱。
使用 Web 服務(wù)
為使用該 web 服務(wù),我們?cè)谙嗤慕鉀Q方案(Solution)下創(chuàng)建一個(gè)網(wǎng)站,只需在解決方案管理器上右擊該解決方案名字即可,web 服務(wù)調(diào)用的網(wǎng)頁(yè)應(yīng)具有一個(gè)控制管理以顯示返回的結(jié)果和兩個(gè)控制按鈕,一個(gè)用于返回另一個(gè)用于開(kāi)始調(diào)用服務(wù)。
web 應(yīng)用的文件內(nèi)容如下:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="wsclient._Default" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" ><head runat="server"><title>Untitled Page</title></head><body><form id="form1" runat="server"><div><h3>Using the Stock Service</h3><br /> <br /><asp:Label ID="lblmessage" runat="server"></asp:Label><br /> <br /><asp:Button ID="btnpostback" runat="server" onclick="Button1_Click" Text="Post Back" style="width:132px" /><asp:Button ID="btnservice" runat="server" onclick="btnservice_Click" Text="Get Stock" style="width:99px" /></div></form></body></html>web 應(yīng)用的代碼如下:
using System;using System.Collections;using System.Configuration;using System.Data;using System.Linq;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.HtmlControls;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Xml.Linq;//this is the proxyusing localhost;namespace wsclient{public partial class _Default : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){if (!IsPostBack){lblmessage.Text = "First Loading Time: " + DateTime.Now.ToLongTimeString}else{lblmessage.Text = "PostBack at: " + DateTime.Now.ToLongTimeString();}}protected void btnservice_Click(object sender, EventArgs e){StockService proxy = new StockService();lblmessage.Text = String.Format("Current SATYAM Price:{0}",proxy.GetPrice("SATYAM").ToString());}}}創(chuàng)建代理服務(wù)器
代理服務(wù)器指的是一個(gè) web 服務(wù)代碼的代替者。在使用 web 服務(wù)之前,我們必須創(chuàng)建一個(gè)代理服務(wù)器。這個(gè)代理服務(wù)器是由客戶端應(yīng)用注冊(cè)的。然后客戶端應(yīng)用實(shí)現(xiàn)調(diào)用 web 服務(wù)使之像在使用一個(gè)本地方法一樣。
該代理服務(wù)器將調(diào)用,并用適當(dāng)?shù)母袷綄⒄{(diào)用像發(fā)送 SOAP 請(qǐng)求一樣發(fā)送到服務(wù)器。SOAP 支持簡(jiǎn)單對(duì)象訪問(wèn)協(xié)議(Simple Object Access Protocol)。該協(xié)議適用于 web 服務(wù)數(shù)據(jù)交換。
當(dāng)此服務(wù)器響應(yīng)并返回一個(gè) SOAP 包給客戶端時(shí),代理服務(wù)器將一切呈現(xiàn)給客戶端應(yīng)用程序。
使用 btnservice_click 調(diào)用 Web 服務(wù)之前,Web 應(yīng)用應(yīng)該被添加到應(yīng)用程序。這將透明地創(chuàng)建一個(gè)代理類,可由 btnservice_click 事件使用。
protected void btnservice_Click(object sender, EventArgs e){StockService proxy = new StockService();lblmessage.Text = String.Format("Current SATYAM Price: {0}", proxy.GetPrice("SATYAM").ToString());}采取以下步驟創(chuàng)建代理:
步驟 (1)?: 在解決方案管理器(SolutionExplorer)的 web 應(yīng)用入口處右擊選擇 ‘Add Web Reference’。
步驟 (2)?: 選擇 ‘Web Services in this solution’,會(huì)返回我們編寫(xiě)的股票服務(wù)引用。
步驟 (3)?: 點(diǎn)擊該服務(wù)打開(kāi)測(cè)試頁(yè)面,創(chuàng)建代理時(shí)默認(rèn)為 ‘localhost’,當(dāng)然你也可以進(jìn)行重命名。點(diǎn)擊 ‘Add Reference’ 來(lái)實(shí)現(xiàn)向客戶端應(yīng)用程序添加一個(gè)代理。
在代碼中加入以下語(yǔ)句使之包含該代理:
using localhost;?
ASP.NET 配置
?
配置
一個(gè) ASP.NET 應(yīng)用程序的行為是由以下兩個(gè)配置文件中的不同設(shè)置決定的:
- machine.config
- web.config
machine.config 文件包含所有支持設(shè)置項(xiàng)的默認(rèn)和設(shè)置機(jī)器的具體值。機(jī)器的設(shè)置是由系統(tǒng)管理員,且應(yīng)用程序通常不能訪問(wèn)這個(gè)文件。
然而,一個(gè)應(yīng)用程序,可以通過(guò)在它的根文件夾中創(chuàng)建 web.config 文件覆蓋默認(rèn)值。web.config 文件是 machine.config 文件的一個(gè)子集。
如果應(yīng)用程序包含子目錄,那么它可以為每個(gè)文件夾定義一個(gè) web.config 文件。每個(gè)配置文件的范圍是用一個(gè)分層的自上而下的方式確定。
任何 web.config 文件都可以在本地?cái)U(kuò)展,限制,或重寫(xiě)任何設(shè)置在上層的定義。
Visual Studio 會(huì)為每個(gè)項(xiàng)目生成默認(rèn)的 web.config 文件。應(yīng)用程序可以在沒(méi)有 web.config 文件的情況下執(zhí)行,然而,我們不能調(diào)試一個(gè)沒(méi)有 web.config 文件的應(yīng)用程序。
下圖顯示的是用于 web 服務(wù)教程中的解決方案資源管理器為樣本的例子:
在這種應(yīng)用中,存在兩個(gè) web.config 文件分別對(duì)應(yīng)于調(diào)用 web 服務(wù)的 web 服務(wù)和 web 站點(diǎn)。
web.config 文件中的配置元素是作為根節(jié)點(diǎn)的。此元素中的信息分為兩個(gè)主要領(lǐng)域:配置節(jié)處理程序聲明區(qū)域,和配置節(jié)設(shè)置區(qū)域。
下面的代碼片段顯示了一個(gè)配置文件的基本語(yǔ)法:
<configuration><!-- Configuration section-handler declaration area. --><configSections><section name="section1" type="section1Handler" /><section name="section2" type="section2Handler" /></configSections><!-- Configuration section settings area. --><section1><s1Setting1 attribute1="attr1" /></section1><section2><s2Setting1 attribute1="attr1" /></section2><system.web><authentication mode="Windows" /></system.web></configuration>Configuration Section Handler 聲明
配置節(jié)處理程序聲明是包含在 的標(biāo)簽中的,每個(gè)配置處理程序指定配置節(jié)的名稱,并包含在提供了一些配置數(shù)據(jù)的文件中。它具有以下基本語(yǔ)法:
<configSections><section /><sectionGroup /><remove /><clear/></configSections>它具有以下元素:
- Clear?- 所有涉及繼承的節(jié)和節(jié)組的引用。
- Remove?- 刪除一個(gè)繼承引用的部分和部分組。
- Section?- 定義了配置節(jié)處理程序和配置元素之間的關(guān)聯(lián)。
- Section group?- 它定義了一個(gè)配置節(jié)處理程序與配置節(jié)之間的關(guān)聯(lián)。
應(yīng)用程序設(shè)置
應(yīng)用程序設(shè)置允許存儲(chǔ)只讀訪問(wèn)的應(yīng)用程序的名稱-數(shù)值對(duì)。例如,你可以定義一個(gè)自定義應(yīng)用程序設(shè)置如下:
<configuration><appSettings><add key="Application Name" value="MyApplication" /> </appSettings></configuration>例如,你還可存儲(chǔ)一本書(shū)的 ISBN 號(hào)和名字?jǐn)?shù)據(jù)對(duì):
<configuration><appSettings><add key="appISBN" value="0-273-68726-3" /><add key="appBook" value="Corporate Finance" /></appSettings></configuration>連接字符串
連接字符串展示的是可用于網(wǎng)站的數(shù)據(jù)庫(kù)連接字符串。例如:
<connectionStrings><add name="ASPDotNetStepByStepConnectionString" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\\projects\datacaching\ /datacaching\App_Data\ASPDotNetStepByStep.mdb"providerName="System.Data.OleDb" /><add name="booksConnectionString" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\ \databinding\App_Data\books.mdb"providerName="System.Data.OleDb" /></connectionStrings>系統(tǒng)的網(wǎng)絡(luò)元素
system.web 元素為 ASP.NET 配置節(jié)指定了根元素,并且包含了配置 ASP.NET Web 應(yīng)用程序和控制應(yīng)用程序運(yùn)轉(zhuǎn)的配置元素。
它控制大多數(shù)比較常見(jiàn)的需要調(diào)整的配置元素。該元素的基本語(yǔ)法如下:
<system.web> <anonymousIdentification> <authentication> <authorization> <browserCaps> <caching> <clientTarget> <compilation> <customErrors> <deployment> <deviceFilters> <globalization> <healthMonitoring> <hostingEnvironment> <httpCookies> <httpHandlers> <httpModules> <httpRuntime> <identity> <machineKey> <membership> <mobileControls> <pages> <processModel> <profile> <roleManager> <securityPolicy> <sessionPageState> <sessionState> <siteMap> <trace> <trust> <urlMappings> <webControls> <webParts> <webServices> <xhtmlConformance> </system.web>下表提供了一些常用的?system.web?元素的子元素的簡(jiǎn)要描述:
AnonymousIdentification
這是在需要用戶身份確認(rèn)時(shí)對(duì)未被認(rèn)證的用戶進(jìn)行識(shí)別的。
Authentication
它是配置授權(quán)支持的,基本的語(yǔ)法是:
<authorization> <allow .../><deny .../></authorization>Caching
它配置緩存設(shè)置,基本的語(yǔ)法是:
<caching><cache>...</cache><outputCache>...</outputCache><outputCacheSettings>...</outputCacheSettings><sqlCacheDependency>...</sqlCacheDependency></caching>CustomErrors
它定義了自定義錯(cuò)誤消息,基本的語(yǔ)法是:
<customErrors defaultRedirect="url" mode="On|Off|RemoteOnly"><error. . ./></customErrors>Deployment
它定義了用于部署的配置設(shè)置。基本語(yǔ)法如下:
<deployment retail="true|false" />HostingEnvironment
它為托管環(huán)境定義了配置設(shè)置。基本語(yǔ)法如下:
<hostingEnvironment idleTimeout="HH:MM:SS" shadowCopyBinAssemblies="true|false" shutdownTimeout="number" urlMetadataSlidingExpiration="HH:MM:SS" />Identity
它用于配置對(duì)應(yīng)用程序的認(rèn)證機(jī)制,基本語(yǔ)法如下:
<identity impersonate="true|false" userName="domain\username"password="<secure password>"/>MachineKey
它用于配置用于加密和解密數(shù)據(jù)的表單驗(yàn)證 Cookie 的密鑰。
它還允許配置驗(yàn)證密鑰對(duì)視圖狀態(tài)數(shù)據(jù)和 Forms 身份驗(yàn)證票證執(zhí)行消息認(rèn)證檢查。基本的語(yǔ)法是:
<machineKey validationKey="AutoGenerate,IsolateApps" [String]decryptionKey="AutoGenerate,IsolateApps" [String]validation="HMACSHA256" [SHA1 | MD5 | 3DES | AES | HMACSHA256 | HMACSHA384 | HMACSHA512 | alg:algorithm_name]decryption="Auto" [Auto | DES | 3DES | AES | alg:algorithm_name]/>Membership
它用于配置管理和認(rèn)證用戶參數(shù)。基本的語(yǔ)法是:
<membership defaultProvider="provider name"userIsOnlineTimeWindow="number of minutes" hashAlgorithmType="SHA1"><providers>...</providers></membership>Pages
它提供了網(wǎng)頁(yè)的具體配置。基本的語(yǔ)法是:
<pages asyncTimeout="number" autoEventWireup="[True|False]"buffer="[True|False]" clientIDMode="[AutoID|Predictable|Static]"compilationMode="[Always|Auto|Never]" controlRenderingCompatibilityVersion="[3.5|4.0]"enableEventValidation="[True|False]"enableSessionState="[True|False|ReadOnly]"enableViewState="[True|False]"enableViewStateMac="[True|False]"maintainScrollPositionOnPostBack="[True|False]" masterPageFile="file path" maxPageStateFieldLength="number" pageBaseType="typename, assembly"pageParserFilterType="string" smartNavigation="[True|False]"styleSheetTheme="string"theme="string"userControlBaseType="typename"validateRequest="[True|False]"viewStateEncryptionMode="[Always|Auto|Never]" ><controls>...</controls><namespaces>...</namespaces><tagMapping>...</tagMapping><ignoreDeviceFilters>...</ignoreDeviceFilters></pages>Profile
它用于配置用戶配置文件參數(shù)。基本的語(yǔ)法是:
<profile enabled="true|false" inherits="fully qualified type reference"automaticSaveEnabled="true|false" defaultProvider="provider name"><properties>...</properties><providers>...</providers></profile>RoleManager
為用戶角色配置設(shè)置信息。基本的語(yǔ)法是:
<roleManager cacheRolesInCookie="true|false" cookieName="name"cookiePath="/" cookieProtection="All|Encryption|Validation|None"cookieRequireSSL="true|false " cookieSlidingExpiration="true|false "cookieTimeout="number of minutes" createPersistentCookie="true|false"defaultProvider="provider name" domain="cookie domain"> enabled="true|false"maxCachedResults="maximum number of role names cached"<providers>...</providers></roleManager>SecurityPolicy
用于配置安全策略。基本的語(yǔ)法是:
<securityPolicy><trustLevel /></securityPolicy>UrlMappings
它定義了用于隱藏原始URL的映射,并提供更具用戶友好性的的 URL 。基本的語(yǔ)法是:
<urlMappings enabled="true|false"><add.../><clear /><remove.../></urlMappings>WebControls
它提供了對(duì)客戶端腳本共享位置的名稱。基本的語(yǔ)法是:
<webControls clientScriptsLocation="String" />WebServices
用于配置 Web 服務(wù)。
?
?
ASP.NET 部署
?
部署
目前存在兩類 ASP.NET 部署:
- Local deployment(本地部署):在這種情況下,整個(gè)應(yīng)用程序都包含在一個(gè)虛擬目錄下,所有的內(nèi)容和程序集都包含在其中,可被應(yīng)用程序使用。
- Global deployment(全局部署):在這種情況下,組件可以被每一個(gè)在應(yīng)用服務(wù)器上運(yùn)行的應(yīng)用程序所使用。
然而在部署中我們可以利用多種不同的技術(shù),以下我們將討論最常見(jiàn)和最簡(jiǎn)單的部署方式:
- XCOPY 部署
- 復(fù)制一個(gè)網(wǎng)站
- 創(chuàng)建一個(gè)設(shè)置項(xiàng)目
XCOPY 部署
XCOPY 部署是說(shuō)將所有文件遞歸拷貝到目標(biāo)計(jì)算機(jī)上的目標(biāo)文件夾。你可以使用以下任何的常用技術(shù):
- FTP 傳輸
- 使用提供對(duì)遠(yuǎn)程站點(diǎn)復(fù)制的服務(wù)器管理工具
- MSI 安裝程序應(yīng)用
XCOPY 部署簡(jiǎn)單地拷貝程序文件到生產(chǎn)服務(wù)器,并在其中設(shè)置一個(gè)虛擬目錄。你需要使用互聯(lián)網(wǎng)信息微軟管理控制臺(tái)(MMC 管理單元)去設(shè)置虛擬目錄。
復(fù)制一個(gè)網(wǎng)站
在 Visual Studio 中復(fù)制網(wǎng)站是可用的選項(xiàng)。它可在 Website -> Copy Web Site 菜單選項(xiàng)中實(shí)現(xiàn)。此菜單項(xiàng)允許復(fù)制當(dāng)前網(wǎng)站到另一個(gè)本地或遠(yuǎn)程位置。它是一種集成的 FTP 工具。
使用以下幾種選項(xiàng)連接到你的目的地來(lái)選擇所需的復(fù)制模式:
- 覆蓋
- 從源到目標(biāo)文件
- 同步源和目標(biāo)項(xiàng)目
然后通過(guò)物理方式復(fù)制文件。這里不像 XCOPY 部署,這個(gè)過(guò)程是從 Visual Studio 環(huán)境中進(jìn)行部署的。然而,以下兩個(gè)以上部署的方法都有以下問(wèn)題:
- 你傳遞了你的源代碼。
- 沒(méi)有預(yù)編譯和錯(cuò)誤檢查的文件。
- 初始頁(yè)面加載會(huì)很慢。
創(chuàng)建一個(gè)設(shè)置項(xiàng)目
在這種方法中,你使用了 Windows Installer 并且打包好 Web 應(yīng)用程序使它可以部署在生產(chǎn)服務(wù)器。Visual Studio 允許你創(chuàng)建部署包。那么讓我們測(cè)試一個(gè)我們現(xiàn)有的項(xiàng)目,數(shù)據(jù)綁定方案。
打開(kāi)項(xiàng)目,采取以下步驟:
步驟(1):Select File -> Add -> New Project,使用顯示在解決方案資源管理器的網(wǎng)站根目錄。
步驟(2):在 Other Project Types 下選擇 Setup and Deployment,然后選擇 Setup Wizard。
步驟(3):選擇默認(rèn)位置,確保將在根目錄下自己的文件夾站點(diǎn)下建立項(xiàng)目。點(diǎn) Okay 我們就得到了向?qū)У牡谝粋€(gè)屏幕。
步驟(4):選擇項(xiàng)目類型。選擇 ‘Create a setup for a web application’。
步驟(5):下一步,第三屏要從解決方案中的所有項(xiàng)目選擇項(xiàng)目輸出。選中復(fù)選框旁邊的 ‘Content Files from...’
步驟(6):第四屏幕允許包括例如自述等其他文件。然而,在我們的案例中并沒(méi)有這樣的文件。單擊結(jié)束。
步驟(7):最后的屏幕顯示設(shè)置項(xiàng)目總結(jié)。
步驟(8):設(shè)置項(xiàng)目添加到解決方案資源管理器,主設(shè)計(jì)窗口中會(huì)顯示一個(gè)文件系統(tǒng)編輯器。
步驟(9):下一步是創(chuàng)建安裝項(xiàng)目。在 Solution Explorer 中右鍵單擊項(xiàng)目名稱,選擇 Build。
步驟(10):當(dāng)建立完成后,你在輸出窗口中會(huì)得到以下信息:
兩個(gè)文件在生成過(guò)程被創(chuàng)建:
- Setup.exe
- Setup-databinding.msi
你需要將這些文件復(fù)制到服務(wù)器。在本地機(jī)器上雙擊安裝文件來(lái)安裝 MSI 文件的內(nèi)容。
?
?
?
?
?
?
?
?
?
?
?
未完待續(xù),下一章節(jié),つづく
?
總結(jié)
以上是生活随笔為你收集整理的ASP.NET 系列_08_编程指南(四)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: html怎么转换为txt,html怎么转
- 下一篇: asp.net ajax控件工具集 Au