[问题].Net面试题

mikel阅读(849)

1.DateTime.Parse(myString); 这行代码有什么问题?
2.PDB是什么东西? 在调试中它应该放在哪里?
3.什么叫圈复杂度(cyclomatic complexity)?为什么它很重要?
4.写一个标准的lock(),在访问变量的前后创建临界区,要有"双重检查",
5.什么叫FullTrust?放入GAC的assembly是否是FullTrust的?
6.代码加上需要安全权限的特性有什么好处?
7.gacutil /l | find /i "Corillian" 这句命令的作用是什么?
8.sn -t foo.dll 这句命令是干嘛的?
9.DCOM需要防火墙打开哪些端口?端口135是干嘛用的?
10.对比OOP和SOA,它们的目的分别是什么?
11.XmlSerializer是如何工作的?使用这个类的进程需要什么ACL权限?
12.为什么不提倡catch(Exception)?
13.Debug.Write和Trace.Write有什么不同?何时应该使用哪一个?
14.Debug Build和Release Build的区别,是否会有明显的速度变化?请说明理由。
15.JIT是以assembly为单位发生还是以方法为单位发生?这对于工作区有何影响?
16.对比抽象基类和接口的使用
17.a.Equals(b)和a == b一样吗?
18.在对象比较中,对象一致和对象相等分别是指什么?
19.在.NET中如何实现深拷贝(deep copy)?
20.请解释一下IClonable
21.什么叫装箱?
22.string是值类型还是引用类型?
23.XmlSerializer使用的针对属性的模式有什么好处?解决了什么问题?
24.为什么不应该在.NET中使用out参数?它究竟好不好?
25.特性能够放到某个方法的参数上?如果可以,这有什么用?
26.新建包含DataGrid控件的ASP.NET页,DataGrid控件负责显示检索到的数据并可按升降排序,我们通过 SortOrder 属性来给DataGrid控件提供数据排序方式:升序时SortOrder 的值为ASC,降序时SortOrder 的值为DESC。如果用户选择降序,应该执行
a)Application[“SortOrder”] = “DESC”;
string val = (string) Application[“SortOrder”];

b)Cache[“SortOrder”] = “DESC”;
string val = (string) Cache[“SortOrder”];

c)ViewState[“SortOrder”] = “DESC”;
string SortOrder = (string) ViewState[“SortOrder”];

d)Cache[“SortOrder”] = “SortOrder”;
string val = (string) Cache[“DESC”];

27.public static void Main(string[] args)
{
int i = 2000;
object o = i;
 i = 2001;
int j =(int) o;
Console.WriteLine("i={0},o={1}, j={2}",i,o,j);
}
请问此程序的输出是什么,为什么
28.class Class1
 {
  public static int Count = 0;
  static Class1()
  {
   Count++;
  }
  public Class1()
  {
   Count++;
  }  
 
  static void Main()
  {
   Class1 o1 = new Class1();
   Class1 o2 = new Class1();
 
   Console.WriteLine(Class1.Count);
   Console.Read();
  }    
 }
输出什么?
29.以下语句执行后myTable的名称是什么?。
System.Data.DataTable myTable= new System.Data.DataTable();
30.如下的 IDimensions 接口和Box 类,该类显式实现接口成员 Length 和 Width。myDimensions是IDimensions 接口的一个实例。

interface IDimensions 
{
   
float Length();
   
float Width();
}
class Box : IDimensions 
{
   
float lengthInches;
   
float widthInches;
   
public Box(float length, float width) 
   {
      lengthInches 
= length;
      widthInches 
= width;
   }
   
float IDimensions.Length() 
   {
      
return lengthInches;
   }
   
float IDimensions.Width() 
   {
      
return widthInches;      
   }
   
public static void Main() 
   {
      Box myBox 
= new Box(30.0f20.0f);
      IDimensions myDimensions 
= (IDimensions) myBox;
      System.Console.WriteLine(
"Length: {0}", myBox.Length());
      System.Console.WriteLine(
"Width: {0}", myBox.Width());
   }
}

执行以上程序控制台输出为?

答案:

1.

当myString不能满足时间格式要求的时候,会引发异常。建议使用DateTime.TryParse()

2.

PDB是用于保存调试和项目状态信息的文件,在Debug的时候将产生pdb文件,调试的时候应该放在和对应应用程序集相同目录。

3.

一种代码复杂度的衡量标准, 英文名称叫Cyclomatic Complexity。在软件测试的概念里,圈复杂度“用来衡量一个模块判定结构的复杂程度,数量上表现为独立现行路径条数,即合理的预防错误所需测试的 最少路径条数,圈复杂度大说明程序代码可能质量低且难于测试和维护,根据经验,程序的可能错误和高的圈复杂度有着很大关系”。

4.

1public void LockTest()
2{
3    Object lockObj = new Object();
4    lock (lockObj)
5    {
6       //
7    }

8}

5.

FullTrust完全信任。.NET运行时对GAC中的assembly自动赋予Full Trust的权限.

6.

没深入过,望高手指教

7.

全局程序集缓存中如果有Corillian就更新该程序集,没有就安装

8.

显示程序集foo.dll的公钥标记

9.

135端口,因为DCOM的端口号是随机分配的,默认情况下,会分配1024以上的端口号,所以默认情况下,DCOM不能穿越防火墙。因为根本不晓得开哪个端口。但有解决办法可以使DCOM分配的端口号固定。135是远程过程调用(RPC)的默认端口

10.

我想OOP和SOA应该没有对比性吧。OOP是一种编程模型,强调将复杂的逻辑分解出小的模块,特性是继承,封装和多态 。而SOA是一个技术框架或者是一种思想,技术框架和编程模型应该说不是一码事吧?SOA的思想是将业务逻辑封装成服务或者中间件现组成业务总线提供给应 用程序来调用。

11.

将对象序列化成为xml数据,反序列化再将xml转换成对象。应该至少需要ACL权限中的读权限.

12.

原因可能有两点:1)try..catch在出现异常的时候影响性能 2)应该捕获更具体得异常,比如IOExeception,OutOfMemoryException等
13.

Debug.Write是调试的时候向跟踪窗口输出信息。当编译模式为debug的时候才有效,为release的时候Debug.Write在编译的时候会忽略,而Trace则是在debug和release两种模式下均可以向跟踪窗口输出信息。

14.

Debug会产生pdb文件,release不会。Debug用于开发时的调试,不能要于部署,而release用于部署.debug编译一些特殊代码,比如#IFDEBUG Debug.Write等,而Release则会将那些特殊标记省略

15.

方法,因为对于一次运行,很可能只用到一个程序集中极少数类型和对象,而大部分可能并不会被使用,此时CLR傻乎乎的给整个程序集都给Compile了,CLR不是傻疯了么

16.

抽象类能有具体实现,而接口只定义行为规范,不能有具体实现。一个类只能继承一个父类,但能实现多个接口。

17.

不一样。a.Equals(b)表示a与b一致, a==b表示a与b的值相等

18.

对象一致是指两个对象是同一个对象,引用相同。而对象相等是指两个对象的值相同,但引用不一定相同
19.

实现IClonable接口

20.

IClonable方法是实现深度复制的接口,实现它应该能深度复制一个对象出来。深度复制的特征的调用对象的构造方法,创建新的对象,包括创建对 象中嵌套的引用对象的新实例。而Shadow复制则不同,是浅表复制,不重新创建新实例。浅表复制的实现是 Object.MemberWiseClone().

深度复制与浅度复制比较

21.

装箱(boxing)是将值类型的数据转化成引用类型,int i=3; object o = i ;便是装箱过程,而拆箱(unboxing)是将引用类型数据转换值类型,比如int j = (int)o;属于拆箱

22.

引用类型

23.

只序列化有用的数据,而不是序列化整个对象。实现没必要的数据冗余,和提升序列化时的性能

24.

不知道,只是看过有文章说最好少用……

25.

可以,作用可以对参数有进一步限定,比如输入参数为int类型,可以通过允许AttributeTargets=ParameterInfo的Attribute自定义实现来限定输入参数的大小,比如当输入参数小于100的时候便抱错。

 

方法的参数设置Attribute的例子

26.

C

27.

i=2001,0=2000,j=2000

28.

3

29.

""(字符串空)

30.

报错,Box 类并没有Length和Width方法

[SVN]SVN安装与配置

mikel阅读(765)

首选需要下载以下内容:
1.Subversion 1.5
2.TortoiseSVN-1.5.1.13563-win32-svn-1.5.1.msi SVN客户端
3.VisualSVN-Server-1.5.1.msi Windows下的SVN服务器
下载完毕后依次安装
设置 VisualSVN如图
1.右键单击Repository,选择create new respository

2.弹出窗口中输入respository名字

3.创建本地文件夹

4.右键单击文件夹,选择SVN Checkout

5.弹出窗口中输入http://SVN服务器名:8843/svn/Mikel,点击OK

6.完成,这样你就可以在Mikel目录下创建你的项目,并单击右键选择SVN Commit 和SVN Update进行上传和更新操作,以及查看日志等操作,具体见TortoiseSVN帮助

[SVN]SubVersion服务器Windows安装指南

mikel阅读(714)

SubVersion及TortoiseSVN下载请到其官方网站:http://subversion.tigris.org
注:如果要使用TortoiseSVN中文界面,还要下载其语言安装包. 若只在本地计算机上使用,不使用SubVersion服务,则只需安装TortoiseSVN相关组件即可.
一.下载文件列表:
1.SubVersion  点击这里下载,版本是1.3.0,SubVersion服务程序.
2.TortoiseSVN 点击这里下载,版本是1.3.2,SubVersion客户端程序.
3.TortoiseSVN 中文语言包 点击这里下载,版本与上面的匹配.
4.SVNService 点击这里下载,可以将SubVersion服务包装成Windows NT服务.
二.安装步骤
1.安装SubVersion
2.安装TortoiseSVN及语言包
3.配置SubVersion服务
    SubVersion本身是由命令行启动的,在SubVersion安装目录中找到,它不能像Windows NT服务一样随Windows启动,需要借SVNService来包装成Windows NT服务.具体设置如下:
    将下载的SVNService解包后,将其中的拷贝到SubVersion的安装目录中的\bin目录, 保证SVNService.exe和svnserve.exe在同一目录.
    安装服务:
    运行命令:SVNService -install -d -r <svnroot>
    在实际操作中,<svnroot>代表SubVersion服务的电子仓库目录.
    改变服务设置:
    运行命令:SVNService -setup -d -r <newsvnroot>
    在实际操作中,<newsvnroot>代表与SubVersion服务启动时不同的电子仓库目录.
    删除服务:
    运行命令:SVNService -remove
4.用TortoiseSVN创建电子仓库
    TortoiseSVN客户端不是独立的程序,而是与Windows Explorer进行了外壳集成,其操作通过环境菜单来完成. 
   
    如上图所示:
    1.创建名为SVNroot的空目录
    2在目录上,或在在目录内空白处点右键,从TortoiseSVN菜单中选择Create repository here…(在此处创建电子仓库),在选择电子仓库类型后,将会自动生成一些文件和目录.这样就完成了电子仓库的创建,你可以用同样的方法创建多个电 子仓库.
    注:电子仓库类型有两种可供选择,选择任意一种即可:
    1.Native filesystem(FSFS) 本地文件系统
    2.Berkely database(BDB) Berkely数据库
    不同的选择只会影响电子仓库的数据存取格式,默认选择为:Native filesystem
    在本例中,可以用:SVNService -install -d -r e:\svnroot来安装SubVersion服务
    要问本机安装的服务请在右键菜单中选择Reop-browser(电子仓库浏览),弹出如下对话框:
    
    
    如果是访问本地电子仓库,可以使用文件协议:file:///e:/svnroot
    如果从网络上访问其它机器的电子仓库,则使用SVN协议,如:svn://127.0.0.1
    
    上图对话框中会以树状结构显示电子仓库的内容. 

[SVN]SVN配置

mikel阅读(642)

svn架设快速入门(转)
如何快速建立Subversion服务器,并且在项目中使用起来,这是大家最关心的问题,与CVS相比,Subversion有更多的选择,也更加的容易,几个命令就可以建立一套服务器环境,可以使用起来,这里配套有动画教程。
本文是使用Subversion最快速的教程,在最短的时间里帮助您建立起一套可用的服务器环境,只需略加调整就可以应用到实际项目当中。
本教程分为以下几个部门,不仅仅是快速入门,最后我们还有一些高级功能的说明,为了说明简单,教程是在windows下使用的方式,以方便资源有限的项目使用,对于UNIX环境下,区别并不大。
软件下载
服务器和客户端安装
建立版本库(Repository)
配置用户和权限
运行独立服务器
初始化导入
基本客户端操作
1,软件下载
下载Subversion服务器程序。
到官方网站的下载二进制安装文件,来到二进制包下载部分,找到 Windows NT, 2000, XP and 2003部分,然后选择” this directory “,这样我们可以看到许多下载的内容,目前可以下载 svn-1.4.0-setup.exe 。
下载Subversion的Windows客户端TortoiseSVN。
TortoiseSVN是扩展Windows Shell的一套工具,可以看作Windows资源管理器的插件,安装之后Windows就可以识别Subversion的工作目录。
官方网站是TortoiseSVN ,下载方式和前面的svn服务器类似,在Download页面的我们可以选择下载的版本,目前的最高稳定版本的安装文件为TortoiseSVN-1.4.0.7501-win32-svn-1.4.0.msi。
2,服务器和客户端安装
服务器安装,直接运行svn-1.4.0-setup.exe ,根据提示安装即可,这样我们就有了一套服务器可以运行的环境。
安装TortoiseSVN,同样直接运行TortoiseSVN-1.4.0.7501-win32-svn-1.4.0.msi按照提示安装即可,不过最后完成后会提示是否重启,其实重启只是使svn工作拷贝在windows中的特殊样式生效,与所有的实际功能无关,这里为了立刻看到好的效果,还是重新启动机器。
3,建立版本库(Repository)
运行Subversion服务器需要首先要建立一个版本库(Repository),可以看作服务器上存放数据的数据库,在安装了Subversion服务器之后,可以直接运行,如:
svnadmin create E:\svndemo\repository
就会在目录E:\svndemo\repository下创建一个版本库。
我们也可以使用TortoiseSVN图形化的完成这一步:
在目录E:\svndemo\repository下”右键->TortoiseSVN->Create Repository here…“, 然后可以选择版本库模式, 这里使用默认即可, 然后就创建了一系列目录和文件。
4,配置用户和权限
来到E:\svndemo\repository\conf目录,修改svnserve.conf:
# [general]
# password-db = passwd
改为:
[general]
password-db = passwd 然后修改同目录的passwd文件,去掉下面三行的注释:
# [users]
# harry = harryssecret
# sally = sallyssecret
最后变成:
[users]
harry = harryssecret
sally = sallyssecret
5,运行独立服务器
在任意目录下运行:
svnserve -d -r E:\svndemo\repository 我们的服务器程序就已经启动了。注意不要关闭命令行窗口,关闭窗口也会把svnserve停止。
6,初始化导入
来到我们想要导入的项目根目录,在这个例子里是E:\svndemo\initproject,目录下有一个readme.txt文件:
右键->TortoiseSVN->Import…
URL of repository输入“svn://localhost/”
ok
完成之后目录没有任何变化,如果没有报错,数据就已经全部导入到了我们刚才定义的版本库中。
需要注意的是,这一步操作可以完全在另一台安装了TortoiseSVN的主机上进行。例如运行svnserve的主机的IP是133.96.121.22,则URL部分输入的内容就是“svn://133.96.121.22/”。
7,基本客户端操作
取出版本库到一个工作拷贝:
来到任意空目录下,在本例中是E:\svndemo\wc1,运行右键->Checkout,在URL of repository中输入svn://localhost/,这样我们就得到了一份工作拷贝。
在工作拷贝中作出修改并提交:
打开readme.txt,作出修改,然后右键->Commit…,这样我们就把修改提交到了版本库,我们可以运行。
察看所作的修改:
readme.txt上右键->TortoiseSVN->Show Log,这样我们就可以看到我们对这个文件所有的提交。在版本1上右键->Compare with working copy,我们可以比较工作拷贝的文件和版本1的区别。
最后,所有的内容都已经录制为动画文件,大家可以参考。
关于本教程大家有什么意见,可以在论坛里讨论 。
转载地址:http://www.subversion.org.cn/index.php?option=com_content&task=view&id=56&Itemid=9
PS
Subversion安装成service
sc create SVNService binPath= “\”C:\Program Files\Subversion\bin\svnserve.exe\” –service -r E:\svndemo” DisplayName= “SVNService” depend= Tcpip start= auto

Flash动画

[问题]VS2008不支持SourceSafe的问题解决办法

mikel阅读(926)

You've probably all seen Soma's announcement that the 2008 suite of products officially shipped this morning.  Good luck downloading — our servers are pegged 🙂 

If you plan to use VS 2008 with SourceSafe, make sure to pick up the Update CTP too.  Without it, some features like "Open from Source Control" will not work at all.  Pay close attention to the install instructions as well.  As it says in the KB article:

You may receive error messages when you use Visual Studio 2008. This problem occurs because some compatibility fixes require the Tdnamespaceextension.dll file to be reregistered after you install Visual Studio 2008. To reregister the Tdnamespaceextension.dll file, type the following command at the [elevated – RB] command prompt:

regsvr32 "%programfiles%\Microsoft Visual SourceSafe\tdnamespaceextension.dll"

Sorry about the manual install step.  It sucks, I know.  The next Update won't have this requirement.  (We wanted to ship it before orcas but ran into some last-minute delays.  Expect it before the end of the year.)

Why does SourceSafe need an update anyway?  Aren't VS plugin interfaces supposed to be backwards compatible?  Yes, they are.  In fact, there are no changes to the MSSCCI API in 2008; none of the fixes are related to MSSCCI.  (3rd party source control developers can now breathe a sigh of relief).  The changes come from the way SourceSafe implements Open from Source Control, Add to Source Control, and Share inside Visual Studio. 

Starting in VSS 2005, these functions let you browse the database inside VS's open/add dialogs instead of hanging off the File -> Source Control menu like most other source control providers.  It's a cool trick known as a namespace extension.  In VS 2008, as you may have noticed, those open/add dialogs got a facelift: like VSS 2005, VS 2008 now uses the standard Windows dialogs.  So Vista users in particular get a spiffy new one with integrated search & everything.  Unfortunately, that change broke us pretty badly, leading in one way or another to at least 10 of the bugs on my list.  Bottom line, you don't want to be caught without the Update linked above. 

Hopefully these fixes demonstrate our commitment to keep SourceSafe 2005 a viable option with VS 2008, Vista, and beyond!

[MVC]ASP.NET MVC系列教程

mikel阅读(731)

做为设计模式的王者,MVC在众多领域都成为良好的模型的代名词,前日我们只能靠Monorail来实现ASP.NET的Mvc的而且确ASP.NETMvc已经成为现实
本文只想让大家更直观地认知ASP.NET MVC,如果语言有所不当,还望先贤海涵,当然,如果文中有所纰漏还希望大家指出
尽量本着对初学者负责的态度来写,但期间的恒心与毅力相信过来的人更加明白,所以如果书写有误希望大家谅解.
ASP.NET MVCASP.NET 3.5 Extensions Preview 的一个部分.
最新的是 ASP.NET MVC Preview on CodePlex.com如果后续文章的书写中版本变化,笔者将在后面文章中进行补充说明.
说明:

  1. 本文的前提环境为.net 3.5,但笔者会尽力写在.net2.0下兼容的程序
  2. 文本中所使用的IDE都为Visual Studio 2008 RTM(中文) 语言基本为C#不过为了方便大家理解 ,也可能会有一些Visual Basic
  3. 笔者计算机操作系统为Windows 2003 std
  4. 笔者将在文中插入少许广告性例程,希望大家不要反感
  5. 其它约定笔者将会后续补充


以下文章属于ASP.NET MVC CodePlex Preview 4



以下文章是属于Asp.net MVC preview 3


以下文章是属于Asp.net MVC preview 2

相关站点:

[MVC]ASP.Net MVC 开源资源

mikel阅读(825)

ASP.NET mvc ctp版本发布不到一个月时间,在社区出现了丛多的优秀开源项目,社区的活跃性非常高哦,前一段时间园子里也引发了MVCWebForm的讨论,现在给各位推荐几个相关的优秀项目,这些项目是MVC的价值的最佳证明。

1、 ASP.NET mvc Castle MonoRail项目有着直接的渊源关系,第一个是CastleMonorail项目,网站地址: http://www.castleproject.org/ ,建议读读这篇文章:MS MVC框架漩涡中的MonoRail未来 我也在使用WIKI整理castle 的文档:http://www.openbeta.cn/ioc.ashx

2、 NHaml –ASP.NET MVC View Engine,这是一个RubyHaml的版本,对于熟悉Ruby开发的同学一定很熟悉,项目网站http://haml.hamptoncatlin.com/。具体介绍可看这篇文章:http://andrewpeters.net/2007/12/19/introducing-nhaml-an-aspnet-mvc-view-engine

3、 Mvp.Xml Mvp.Xml是一组 Xml LibraryMvp.Xml除了可以让 System.Xml 更好用之外,最主要的是他提早实做许多Microsoft还来不及包在 Framework 里面的 XML 标准的类别,例如:EXSLTXML BaseXIncludeXPointer…等等。Mvp.Xml结合SystemXMLSystem.Xml.Linq 就实现了XsltViewEngine视图引擎,项目网站:http://www.codeplex.com/MVPXML

4、 mvccontrib已经有好几个的.NET IOC应用框架Castle Windsor StructureMap Spring.NET Ninject、以及微软Enterprise Library 4.0将支持依赖注入  。这个项目就是整合这些IoC框架以及视图引擎,包括Castle MonoRail所用的NVelocityView视图引擎、NHamlView视图引擎、XsltViewEngine视图引擎等等,如果你有精力和激情,可参与到这个项目的开发,项目地址:http://code.google.com/p/mvccontrib/ 。可阅读如下文章:IoC Container Support for Windsor, StructureMap and Spring.NetJeffrey Palermo在博客里讨论了建立在ASP.NET MVC框架之上的新MVCContrib开源项目,它现在包括了对大多数流行的 .NET IoC工具的Inversion of Control(控制反转)容器的支持
5、Kigg – A Digg like application developed in ASP.NET MVC http://weblogs.asp.net/rashid/archive/2008/02/18/kigg-a-digg-like-application-developed-in-asp-net-mvc.aspx
MVC Contrib已提供4种备选的视图引擎
http://www.infoq.com/cn/news/2008/02/mvc-contrib-view-engines
Using JQuery to add some ajax magic to the ASP.NET MVC framework
http://code.google.com/p/JQuerymvc/
ASP.NET MVC CAPTCHA:ASP.NET MVC中实现CAPTCHA的方法
http://code.google.com/p/coderjournal/
http://www.coderjournal.com/2008/03/actionfilterattribute-aspnet-mvc-captcha/
ASP.NET MVC CSS Sprite
http://weblogs.asp.net/zowens/archive/2008/04/27/asp-net-mvc-css-sprite.aspx

[教程]ASP.Net MVC框架配置与分析

mikel阅读(731)

前几年的时候ASP.NET就有MVC的概念,实际上就是我们熟悉的WebForm开发模型。
1、Model层与视图无关,并且只与数据库相关:
伪代码:
pulic class Model
{
      pulic DataSet ds()
      {
            //数据库库取数据
            return ds;
      }
}
2、Controller实际上就是我们熟悉的Default.aspx.cs文件,继承自System.Web.UI.Page 类的文件
3、View就是aspx文件了
而今,微软推出了新的MVC开发框架,也就是Microsoft ASP.NET 3.5 Extensions。可以从这里下载:http://download.microsoft.com/download/6/5/c/65cad864-54a5-463a-9573-bc7d0bbc1df9/ASPNetExt.exe
当然,安装之前必须安装VS2008。安装完后可以在创建项目的地方增加以下两种项目。
MVCProject.gif
一种是“ASP.NET MVC Web Application and Test”会同时创建MVC项目和一个测试项目,一个是ASP.NET MVC Web Application,只会纯粹的建立MVC项目。而在项目中引用新文件的时候,也会增加MVC的页面。
MVCItem.gif
在创建MVC项目以后,会增加以下文件
MVCPV.gif
访问的机制是通过URL重写实现的。因此,你需要设置IIS映射。MVCIIS.gif
MVC是通过HttpModule进行地址重写的

  <httpModules>
   
<add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.6.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
   
<add name="DynamicDataModule" type="System.Web.DynamicData.DynamicDataHttpModule, System.Web.Extensions, Version=3.6.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
   
<add name="UrlRoutingModule" type="System.Web.Mvc.UrlRoutingModule, System.Web.Extensions, Version=3.6.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
  
</httpModules>

而在Global.asax.cs中设置了映射关系
   //设置Url重写映射
   //URL格式设置了访问的为controller(这里是Home),action对应HomeController里的方法
   RouteTable.Routes.Add(new Route
   {
    Url = "[controller]/[action]/[id]",
    Defaults = new { action = "Index", id = (string)null },
    RouteHandler = typeof(MvcRouteHandler)
   });

    //设置默认访问地址,因此主目录下看似无用的Default.aspx不能删除掉
    //controller ="Home"设置的是访问的路径,这里对应上图中的Home目录,也对应了HomeController的类名
   //action是对应HomeController.cs类中的Index方法。
   RouteTable.Routes.Add(new Route
   {
    Url = "Default.aspx",
    Defaults = new { controller = "Home", action = "Index", id = (string)null },
    RouteHandler = typeof(MvcRouteHandler)
   });
HomeController.cs代码:
 public class HomeController : Controller
 {
  [ControllerAction]
  public void Index()
  {
   RenderView("Index");
  }

  [ControllerAction]
  public void About()
  {
   RenderView("About");
  }
 }
在HomeController中找到要访问的页面
最后要说明的是Html.ActionLink("About Us", "About", "Test")方法,能够实现自动链接处理,
参数1是 链接显示的文字
参数2是 要访问的文件
参数3是 访问的目录,尽管参数名是controllerName.
全文完。2008年1月18日 by Birdshover
 
http://www.cnblogs.com/birdshover/ 

[专题]ASP.Net上传文件专题

mikel阅读(740)


       本专题从今天开始主要向大家介绍如何实现ASP.NET上传大文件,写这个的目的也主要是为了学习和交流,如果大家发现任何错误,请即时指出,以免误人子弟。本专题主要参考文章:
[1]Asp.NET大文件上传开发总结
[2]ASP.NET 应用程序生命周期概述
[3]SunriseUpload.0.9.1的源码分析(七)
[4]Http 请求处理流程
[5]使用 HtmlInputFile 服务器控件时无法上载大文件
正文部分:

        注意:以下红色部分字体说明该内容引用于微软的相关网站
        因为要做一个视频网站,所以需要提供用户上传视频的功能。可是ASP.NET自带的上传控件只能用于上传小文件,这显然无法满足需要。有些朋友可能要问了 "为什么需要用那个呀,直接FTP传不就好了",是的,用FTP传就方便了很多,但是FTP在用户上传后,无法对上传的文件进行在线编辑(比如格式转换, 添加到数据库呀等),所有这些可以由网站自动完成的烦琐的任务则都将交由管理人员来完成,这对于一个商业网站来说无疑增加了用人成本。而且这些重复的低脑 力活的工作,看起来就和体力活没什么区别,这不又从另一个侧面降低了我们这些IT人员的价值。扯远了,言归正传,那MS为什么要将这个上传控件的能力限制 这么小呢?在MSDN以及微软的其它网站上我们可以了解到:"
web.config 配置文件中的<httpRuntime> 节的 maxRequestLength 参数的默认值为 4096 (4 MB)。所以,默认情况下不能上传大于这个值的文件。这也是为了防止拒绝服务攻击。"

       可是,这样一来就对我们上传大文件造成了麻烦。有些朋友可能发现既然限制上传文件大小是由于maxRequestLength 这个参数,那将这个值改大点不就OK了。的确,这样做便可轻轻松松提高文件上传大小的限制,可是在"
上传过程中,ASP.NET 首先将整个文件加载到内存中,然后用户才可以将该文件保存到磁盘。"也 就是说,如果用户上传的文件大小为100M,那么服务器的内存中就要拿出100M来存放用户上传的文件;如果是10个用户在同时上传,暂且不提并行性的问 题,那10个用户就要占用1000M的内存;如果是100、1000、甚至是几万个用户呢?那么,再大的内存都不够你拿来提供用户上传的。   

        
" 另外,其他因素也会影响可以上载的最大文件大小。这些因素包括可用内存、可用硬盘空间、处理器速度和当前网络流量。对于上载的常规流量的文件, Microsoft 建议您让最大文件大小介于 10 到 20 MB 之间。如果您很少上载文件,则最大文件大小可以为 100 MB。"

        一个企业内部的视频网站,估且算它的日流量为1000人次,那么按照微软的建议,所上传的文件大小应尽量控制在20M以内,可是这样的大小还是很容易造成 服务器的瘫痪,综合考虑后,我把大小控制在6M以内(为什么在这个范围,后面会有提到,提早告诉大家,是为了让文章能连贯一点)。大家一定会奇怪“一般一 部视频大小都至少有个100~200M,小于6M的不多吧?” 是的,这个问题就是我们要解决的关键。

        在解决这个问题前,大家必须先清楚一件事,我们这里所说的文件大小"6M","200M"指的是针对服务器端而言呢,还是客户端而言呢?正确的理解如下: 200M是针对客户端用户而言的大小,一般情况下允许用户上传最大600M大小的文件(这个600M是考虑到我服务器的硬盘大小,大家可以灵活掌握,不过 一般最好不要超过1G);6M则指的是服务器端所能接收的文件大小,这样才能不让服务器的内存因为上传文件而被吞噬光。

        那么,现在我们就可以把问题转化为:如何让服务器以小于6M的大小来接收用户上传的200M视频的?

        大家是不是看得有点晕,那我拿“奥运会门票出售的情况”来举个例子。
        这几天是出售奥运会门票的最后一个阶段,为了能在最后一阶段买到门票,很多人都提早好几天等在售票窗口前。我们假设有10W人需要门票(就好像用户上传 200M的视频),理想的情况自然是开10W个窗口来出售门票(这里的窗口相当于服务器可以接收的文件大小,而10W则相当于我们将 maxRequestLength等相关元素设置很大)。可是想一想就知道,这样做是不可能的(原因自己想吧~)。那怎么解决的呢?只有将窗口数按照某种 规则限制在一定数量(比如20个),然后想买票的人排队买票。

        相信通过这个例子,有些朋友可能已经想到了如何解决我们之前的问题了。办法就是在服务器端通过某种方法将请求分组接收。

[文档]SqlDataSourceEnumerator类

mikel阅读(1124)

提供了一种枚举本地网络内的所有可用 SQL Server 实例的机制。
命名空间:  System.Data.SQL
程序集:  System.Data(在 System.Data.dll 中)
备注
SQL Server 2000 和 SQL Server 2005 都允许应用程序确定当前网络内是否存在 SQL Server 实例。SqlDataSourceEnumerator 类将这些信息向应用程序开发人员公开,提供一个包含有关所有可用服务器的信息的 DataTable。此返回表包含一个服务器实例列表,该列表与用户尝试创建新连接时提供的列表匹配,并在“连接属性”对话框上扩展包含所有可用服务器的下拉列表。
线程安全
此类型的任何公共 static(在 Visual Basic中为 Shared) 成员都是线程安全的。但不保证所有实例成员都是线程

  名称 说明
公共方法 Equals 确定指定的 Object 是否等于当前的 Object。 (继承自 Object。)
受保护的方法 Finalize 允许 Object 在“垃圾回收”回收 Object 之前尝试释放资源并执行其他清理操作。 (继承自 Object。)
公共方法 GetDataSources 检索包含有关所有可见 SQL Server 2000 或 SQL Server 2005 实例的信息的 DataTable。 (重写 DbDataSourceEnumerator..::.GetDataSources()()()。)
公共方法 GetHashCode 用作特定类型的哈希函数。 (继承自 Object。)
公共方法 GetType 获取当前实例的 Type。 (继承自 Object。)
受保护的方法 MemberwiseClone 创建当前 Object 的浅表副本。 (继承自 Object。)
公共方法 ToString 返回表示当前 ObjectString。 (继承自 Object。)

页首

  名称 说明
公共属性 静态成员 Instance 获取 SqlDataSourceEnumerator 的实例,该实例可用于检索有关可用 SQL Server 实例的信息。

详细内容见: