你的位置:睿鑫网络 >> 编程 >> web开发 >> ASP.NET >> 详细内容 在线投稿

为Asp.net应用程序设置构建Web服务

排行榜 收藏 打印 发给朋友 举报 来源: 网络   发布者:未知
热度15票  浏览34次 时间:2010年1月15日 10:55
睿鑫网络c Z.S$e!PkC

一.什么是应用程序设置

nnet,f&}0

m%J"A@R(A0应用程序设置通常是指与应用程序密切相关的一系列参数。在基于窗体的Windows应用程序中,应用程序设置主要包括影响应用程序布局的位置.尺寸等参数;影响应用程序外观的颜色.形状等参数;此外,还包括应用程序的语言.文化等设置以及数据源和连接字符串等等。这些参数设置在程序开发中应用广泛,有的被用来保持应用程序的一致性.连续性,比如保存应用程序结束时的窗体大小.位置及背景颜色,下次执行应用程序时恢复这些设置;另一些参数则使程序代码更加简洁高效,比如保存数据库连接字符串供多次调用。

y/jp,iye5M&d*[0

J.O I9o0on&t0与基于窗体的windows应用程序不完全相同,基于web的Asp.net应用程序有其自身的特殊性,它是面向网络的。这决定了asp.net应用程序设置除包括上面的参数外,还包括,

DOC r4W$J)nk0 睿鑫网络M;V9bb6CUb8M#n

#身份验证和授权等安全机制

~7l*dPxAC0 睿鑫网络:}1QPju;@1B

#网络传输协议类型和针对特定类型文档的http处理程序

2k h^ e6_0

q&OU M3C8^Ew g tuw0#事务处理睿鑫网络!m6G-JLd9C

dU5F+C;\(QG.ZQ8p0#为所有页面设置超时

.HgZ)Y r1x0

yx r*m#Ug R;G0#定制出错页面来代替默认IIS出错页面

G)pb3?^H'c0 睿鑫网络 yb#lE9dJ#P e"qDP

#会话和会话状态信息睿鑫网络-Y%V9x4n0E

G3R RcJ}0#页面缓存行为

o3lqp i(R b0 睿鑫网络"]-|1Jgd7A,pd&H

#自定义及扩展睿鑫网络 oT-XmD v5dF.{

睿鑫网络GF)k }s1]LR p

可见,asp.net 应用程序设置参数类型更为丰富。实际开发中,它们不仅被用来提高应用程序安全性.高效性,而且易于对特定用户实施管理并可定制需求。

Ez#S7cu,|6V8P f%|0 睿鑫网络"^ a(U+_\|[L/j-K8Fc

二.为什么要将asp.net应用程序设置外置为web服务

$X$z`j2V#@7~0 睿鑫网络(O$]5P_7R

关于web服务的优点就不用再提了,媒体铺天盖地的宣传和在许多领域的广泛应用已经足够说明问题。不过这里仍然要强调的是,web服务实际上就是asp.net应用程序,只不过重新进行了组织。特别地,web服务为不同应用程序之间共享对象提供了实现。通过简单的引用,你可以在程序中访问另一程序实现的功能,而不仅仅是asp.net中那样只有通过浏览器才能实现。显而易见,web服务也具有一般asp.net应用程序所拥有的许多功能和特性。Asp.net和web服务都有状态管理功能就是一个典型的示例。

Q2P8xb] [;gu0 睿鑫网络4``/A| ]hc[DxE

然而,将asp.net应用程序设置外置为web服务有什么优点呢?一方面可以从软件(应用程序)可复用性方面得到答案,试想一想,如果客户应用程序(源)需要使用另一应用程序(目标)的设置参数,这时,将目标应用程序设置配置为web服务,在源应用程序中就能够方便地调用了,就像在本机配置了同样的设置一样。另一方面,web服务(asp.net应用程序应用)特殊的存储其应用程序设置的机制(即下面将讲述的web.config文件存储设置)使得应用程序跨平台.跨internet以及应用程序的升级和xcopy部署方式成为可能。睿鑫网络,X l%I7o9O

t-`-w ez9Z#Ey#u yq0三.存储asp.net应用程序设置睿鑫网络r(fKfv(d;FZw

睿鑫网络;S6l,nI$V(~:S0?6r8|m

我们应该已经知道,基于windows应用程序的设置一般保存在注册表中。通过对注册表写入"键值对",保存特定相应的设置值。然后,通过读取注册表的"键值对",取出相应的设置值。看来,过程本身并不复杂,加上.Net框架为注册表的读写提供了丰富的类库支持,使得操作注册表以读写应用程序设置更为简单(关于注册表读写请参见专门的文章,这里就不展开了)。

r\(Eu S^0

H%\.Zb.YL0然而,注册表本身是个相当敏感的区域,对它的读写不可避免地引发安全隐患,即便在本地主机上操作也要相当慎重,更何况置身于不可预料用户数量的网络环境之下,就更应该在公开注册表的读写操作时慎之又慎!或者,干脆找别的方法替代!

a;U}*lh%q8i0

j$sU7q!UQ.i0正是由于这样的原因,Asp.net应用程序设置除了存储在注册表中外,更多地,通过以下两种方式来存储:

/i&a9_\E'l6?)c0

z7Z4z"nM0#Application对象睿鑫网络?H:i&d*eF

睿鑫网络'DWFb/Ha%@ Z x

#Web.config文件睿鑫网络y?d#QjYQ&r'`

"W^.O8U-{UNd0四.使用Application对象存储应用程序设置

_0el2^%q0Z0

~lVB}nD0对我们来说,Application对象相当熟悉。它是asp.net从asp中保留下来的.用以简化应用程序状态管理的两个对象之一(另一个是Session对象)。作为一个asp.net应用程序,web服务就象其他任何web应用程序一样,也能够访问application对象。睿鑫网络S3ace9~$m$F

睿鑫网络Y Q3X-k8l1Y

在asp.net中,application对象可视为高级语言中的全局变量。它在应用程序中保持一致,以实现 ASP.NET 应用程序中多个会话和请求之间的全局信息共享。(有必要提一下,ASP.NET 应用程序是单个 Web 服务器上的某个虚拟目录及其子目录范围内的所有文件.页.处理程序.模块和代码的总和。)

WUjg S+F0

%M-h/Ok cQw0有别于普通全局变量的是,asp.net应用程序状态Application对象在客户端第一次从某个特定的 ASP.NET 应用程序虚拟目录中请求任何 URL 资源时创建。Web 服务器上的每个 ASP.NET 应用程序都要创建一个单独的实例。然后通过此Application对象公开对每个实例的引用。

w5GW[:MM;F?0v0 睿鑫网络w@3j.~:K4`1](g

这样,application对象适宜被用来保存需要不同用户共享的数据,记载关于应用程序的设置情况,以使其能够被运行于同一个web应用程序中的所有代码访问,进一步,将包含application对象的方法外置为web服务,以在应用程序中共享对象并操作应用程序设置值。有关应用程序访问次数的状态编程,读取远程数据库的互操作编程等都通过以此类似的方式来实现应用程序的设置共享。睿鑫网络,]vCt)a&I

*y0^.?.u*\4u(V-K0下面的代码使用application对象,记载特定应用程序的访问次数,并将方法外置为web服务供应用程序调用:

}m nlR0 睿鑫网络9E%F qb6npT

[WebService(Namespace="http://www.thjx.com")]

F.Q {9uK0 睿鑫网络)Jvw4X\ `;G.A+Z-@

public class Application : System.Web.Services.WebService睿鑫网络MR8m?5oAy

n4p T@;k(jc(w0{

F9VU,a%TR }0\s0

q![8z+O| Xg0///

睿鑫网络 ~G&ZZ U;g/vP2@

Ce-eJ4N6c3K1Sk0/// 返回应用程序被访问次数

5E%R]?m@+@s Wq0

5ld BDaa)t0///

*UWp3D7As%X2b0 睿鑫网络ZCp rYt o[@;wI

[WebMethod(Description="返回特定应用程序被访问的次数")]

fr8M[$B I2|c0 睿鑫网络 s%_!t0e?d5R^

public int GetAppAccessCount(string key)睿鑫网络Ov9a({s%r&zq

Ku2M*LN[0{睿鑫网络"k5Br$g4q;Y x}q

睿鑫网络5or"v {8vFL!S

if(Application[key]==null)

n0a\2y4k0 睿鑫网络k @QHx2MJzB

{睿鑫网络/M*x.?Xrllp$I-n

睿鑫网络,loMt&cO0Tr?

Application.Lock();//锁定Application对象以同步访问

5k8p3L{y;^8?"Z4G(n|0

I;J+M|3?|0Application[key]=1;睿鑫网络8x$J[Vy:_7jM2hx

睿鑫网络+~3~F)p*}!S]7I0H&D:W

Application.UnLock();//取消锁定睿鑫网络lUj,? GS

睿鑫网络(T:l!r'D|

}

AjK6K'x~C0

[`/rx:[{0else睿鑫网络B7_d*X]i0Z

\&a'z-D@3~0}0{睿鑫网络)o4Et-]L0_oa4Z&{

睿鑫网络 Q ]7wuiPv ^9T

Application.Lock();睿鑫网络m9\%\ tGe.T

睿鑫网络CL8V)g5rI4@N

Application[key]=Int32.Parse(Application[key].ToString())+1;

+Zt+L0c0@ [aR0 睿鑫网络 dPog$v"j

Application.UnLock();睿鑫网络4? d1G$A a6k _"bdl

f&qz!x2E |_^^v0}睿鑫网络t&g!N l U(h.WB

睿鑫网络8^ [ N/lO M

return (int)Application[key];睿鑫网络|9IbuG6D0}

0}~9dz5t)[0}

-nI i8NsQ3~o0 睿鑫网络,Kz:[Rz9v

}睿鑫网络U+E4t+Yy5aU[U%gK1S

.B'l!I lZ2XU0s Z)V0方法GetAppAccessCount(string key)在特定应用程序被执行一次后访问次数递增1个单位量,并保存在应用程序设置变量中,下一次来自任何用户的访问将在这个变量的基础上递增该设置。睿鑫网络I;u lJ/O x2@a

睿鑫网络d.E#Ew3i!c

五.使用Web.congfig文件存储应用程序设置睿鑫网络A1G(j+Hm2LI\:^

睿鑫网络-c,Y)?Y7u9`

从上面可以知道,asp.net应用程序需要配置很多的特殊设置,包括为所有页面设置超时.定制出错页面来代替默认IIS出错页面以及安全设置和授权级别设置等。看上去,这么多类型的设置一定很麻烦,幸运地是,asp.net结束了需要进行手工配置的历史,那就是将设置保存在Web.config文件中。这是不同于此前提到的使用注册表或application对象保存应用程序设置的另一种保存应用程序设置的方法。由于web.config文件存在于应用程序根目录下,以这种方式保存的应用程序设置将使应用程序跨平台使用和伸缩性大大增强。睿鑫网络R%D(rF9yY {

睿鑫网络 k d#Gi@_-w

使用web.config文件存储应用程序设置有很多优点,web.config实际上是一个纯文本文件,显然,存储在纯文本文件中的配置信息非常容易修改,而且,不象传统的asp,任何对配置设置的修改不需要重新启动web服务器,就可以立即应用于当前的web应用程序;同时,设置好的配置被自动应用于当前文件夹和它所有的子文件夹,使真正兼容主机的xcopy成为可能,我们只需要复制另一个IIS虚拟目录中的所有web应用程序文件即可实现应用程序部署;另外,一些特定任务的配置如基于表单的授权只有通过使用web.config文件才能实现。睿鑫网络Q2z1y*R~v7gC

睿鑫网络+UZ_ E a!s

这里,有必要简要说说web.config文件的构造。web.config文件是标准的xml文件,遵循格式正确的xml文档的所有规范。它包括多个部分,每一部分处理一个特殊的任务。web.config文件由许多小节组成,包括验证小节.安全性小节.错误处理小节和web服务小节。并以键值对的形式保存应用程序配置信息。

;Y F`II3V0

@+J LZjJl @0iQb^0作为标准的xml文档,web.config文件的根元素是,它包含一个子元素,而后者又包括许多配置部分。Web.config文件包含许多标记,每一个标记对应一个所谓的"部分(section)"。如,表示身份验证的Authentication.表示授权的Authorization.定制错误的CustomErrors.会话设置SessionState等等。睿鑫网络9cI,|g,t

睿鑫网络3XR u ?Y:T S

尽管web.config文件为用户自定义提供了很大的空间,我们可能仍然需要一些用户设置。appSettings部分就是用来满足这项要求的,请记住这部分并不在标记中,而是单独存放在标记中,数据库连接字符串.email服务器地址和日志文件存放路径,通常页可以放在这部分。睿鑫网络{E-\Ja

睿鑫网络qR~"y.AV%f9Ts

下面的代码片段是一个web.config文件的设置小节,该小节定义了应用程序设置,即appSettings小节,它包含了数据库连接字符串和另一个用户设置LogFilePath键值对:

:K|+`"l.y9SxL0 睿鑫网络czG W:?.B+r

9O$P+]*E5UWAEWG0

A s jL3n)W u0睿鑫网络3| a \6UHSj

^ L'guBjcN0睿鑫网络kW ECH&d-fg

Rk+Ba5K g3D!v0

a z8cuV0 睿鑫网络5u J(Bg,\P@-qJ }{*J

'| zxa7C9an"m0 睿鑫网络 V7d6d-~9E;J7}$T"YJ`n

5rU:Q"jN0 睿鑫网络L&BO:u wDc~ a

.Net框架支持asp.net应用程序访问应用程序设置。其ConfigurationSettings 类提供对指定配置小节中配置设置的访问。该类的公共属性ConfigurationSettings.AppSettings 属性可获取 元素配置节中的配置设置,该属性是一个NameValueCollection,它包含配置设置的名称/值对:

0Wn[R/Kx(^0

l&FG`#x1KP0public static NameValueCollection.AppSettings {get;}睿鑫网络9fd {n+Q$I^F_

睿鑫网络u2D:H]f%r

下面的web服务方法用于获取应用程序配置设置:using System.Configuration;

`0H[t_0 睿鑫网络zb-R3?q@pJ

[WebMethod]睿鑫网络V+n4`F;O4Q

j2t.gf Jo/My0}(d0public string GetAppSetting(string key)

%Bu@/J+Ke#k^2O0

(L5]4W.|;XU(zr_0{

'q ~B X(n&ve ~-o [0

F3GhL5Bu0return ConfigurationSettings.AppSettings[key];睿鑫网络 S d7D6lN&{z

`}O.e8Ip `0}

+rZY3v[5g ] X2W0 睿鑫网络6~*q$u8vr@ k _

注意,AppSetting属性是只读的,要想修改应用程序设置,必须编辑web.config文件。同时,如果key键并不存在于web.config文件中,读取AppSettings属性将引发错误。睿鑫网络 Q1R(y` Lzu0I

)N6~ e0S@T Gi0Tl0ConfigurationSettings 类还提供了一个公共方法ConfigurationSettings.GetConfig 用于返回用户定义的配置节的配置设置。

.OFN#?'WAq0 睿鑫网络t xD_^:Ez G

public static object GetConfig(string sectionName);睿鑫网络 g3W&K {:y

睿鑫网络+~,hm8vg B x

其中,参数sectionName 表示要读取的配置节。下面的web服务方法用于获取用户定义配置的指定键值:

_5] b+eo+B0 睿鑫网络I1tLS Yf

[WebMethod]睿鑫网络NxE[ R2?2p

J8P[R U R+v0public string GetConfig(string key)

lV5lt!Z^0 睿鑫网络.zf(K|/Mw7Rr

{睿鑫网络6Y(j7_AlE/YlG

睿鑫网络nr*{U2w5b9y{:u(J

NameValueCollection nv=new NameValueCollection();

vC)z j@SFe0

"@s \ b6`1L0//实例化NameValueCollection 类对象

-r1dN;S,@0

_N_"Xf1en6}0nv=(NameValueCollection)ConfigurationSettings.GetConfig("appSettings");

]^e,k]6Q0

$Z!FmWX9LF0//返回用户定义的配置节的设置睿鑫网络 E})NL-Sz'ny;c

)K:f%\y_%A3n0return nv[key].ToString();

\qh8xsA!`4}+k0

rjl ?N ]0//返回特定键值

t/{2]-_jqz;D0

'x$J;T5ww0}

TR;s7w9Ik|5qiB0

5`b [|@/L0六.消费"实现asp.net应用程序设置的web服务"

%?(T+|{0D a4u yf0 睿鑫网络0B%e3Hre-I$D

你可以编写 Web应用程序.Windows桌面应用程序或Web服务等应用程序来消费已经创建的应用程序设置web服务。实现方式同任何标准的web服务一样,没有什么特别之处,应该说很简单,这里就不展开讲解了。

1r\'l rj{r6J:E0 睿鑫网络4w4sC4E5Q rg

参考资料:《Professional Xml For .Net Developers》.《Professional Asp.net Web Services》

] Wb b,c&H@ m8FD,c0
顶:1 踩:1
对本文中的事件或人物打分:
当前平均分:1 (4次打分)
对本篇资讯内容的质量打分:
当前平均分:-0.2 (5次打分)
上一篇 下一篇

网络资源