首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 数据库 第二书店 程序员

Tag/ 


共2901个网摘 [ 1  2  3  4  5  6 ... 97 ]  下一页  |  

连载:大学生求职七大昏招(十)抱怨(1) - Leo——感谢生活! - CSDNBlog

jobchanceleo收录,使用标签:职场, leo, 程序员, 求职, 老板, 薪水, 加薪, 简历, .net, java, 连载, 大学生求职七大昏招,时间:2008-7-4 9:06:37 | 相关网摘我也收藏

大学四年,每年两假,一共有八次。就程序开发而言不用毕业就可以参与项目的开发,而且很多学生在两假期间兼职写程序,在锻炼自己、创造收入的同时,也很受公司的欢迎。如果同样是JAVA这个职位,我更愿意把机会提供给有准备的人,而不是像李水泽这种希望公司为他多多准备的人……


连载:大学生求职七大昏招(九)说谎(完结篇) - Leo——感谢生活! - CSDNBlog

jobchanceleo收录,使用标签:职场, leo, 程序员, 求职, 老板, 薪水, 加薪, 简历, .net, java, 连载, 大学生求职七大昏招, ,时间:2008-7-4 9:05:41 | 相关网摘我也收藏

首先,黄宇没有选择说谎或者更拙劣的办法去掩盖自己的这个问题。虽然即将从事的工作黄宇非常喜欢,也有相对高的待遇,应该说机会很难得。但黄宇没有选择去办个假证,实在是明智之举。我们曾经见过一些候选人因为不能提供相应的资料而在面试中落马,也曾经见过提供了虚假资料被公司发现后开除的员工……


连载:大学生求职七大昏招(八)说谎(7) - Leo——感谢生活! - CSDNBlog

jobchanceleo收录,使用标签:职场, leo, 程序员, 求职, 老板, 薪水, 加薪, 简历, .net, java, 连载, 大学生求职七大昏招,时间:2008-7-4 9:05:16 | 相关网摘我也收藏

如果说孙秀秀粉饰自己的简历空白点显得“笨”,李子平自作聪明暴露缺点显得“愚昧”,那么这个艾安雅就应该是“浑不吝”的典型了。用大家都明白的话来说,就是肆无忌惮毫无节制的夸大自己的实力……


连载:大学生求职七大昏招(七)说谎(6) - Leo——感谢生活! - CSDNBlog

jobchanceleo收录,使用标签:职场, leo, 程序员, 求职, 老板, 薪水, 加薪, 简历, .net, java, 连载, 大学生求职七大昏招,时间:2008-7-4 9:04:45 | 相关网摘我也收藏

如果说孙秀秀粉饰自己的简历空白点显得“笨”,李子平自作聪明暴露缺点显得“愚昧”,那么这个艾安雅就应该是“浑不吝”的典型了。用大家都明白的话来说,就是肆无忌惮毫无节制的夸大自己的实力……


连载:大学生求职七大昏招(六)说谎(5) - Leo——感谢生活! - CSDNBlog

jobchanceleo收录,使用标签:职场, leo, 程序员, 求职, 老板, 薪水, 加薪, 简历, .net, java, 连载, 大学生求职七大昏招, ,时间:2008-7-4 9:04:14 | 相关网摘我也收藏

招聘方常常会问到这个故事里的问题,“您觉得自己有什么缺点吗?能否举出一个自己的失败案例?”这样的问题,除了是在考察应聘者对自己的认识能力之外,很大程度上在考察应聘者是否诚实……


学习.net应该知道什么(轉)

Calivan收录,使用标签:.NET,时间:2008-7-1 16:51:07 | 相关网摘我也收藏

原文地址:http://www.hanselman.com/blog/WhatGreatNETDevelopersOughtToKnowMoreNETInterviewQuestions.aspx 作者:Scott Hanselman 译者:Tony Qu 前些日子我发了一份ASP.NET面试题 清单. 有一些访客比较保守,觉得我是没事找事,里面都是些很琐碎的问题。剩下的人则说“蛮不错的,我得去看一看其中的一些问题” 我更喜欢后者的回复,我觉得后者才是正确的态度。

当然我并不想把.NET软件开发概括为一些简单的小问题,我只是想让大家多思考。我相信一个真正优秀的ASP.NET(及WinForm)开发人员应该不仅仅会拖放控件到设计器中,也应该掌握更多的东西。一个优秀的赛车比赛选手很了解他自己的坐驾,他知道哪些可以做?哪些不能做?

所以我准备了另外一份清单——一份扩展的清单,供你使用。这是我上个星期在从博伊西去波特兰的路上写在一块板上的,并且我也考虑到了那些觉得我的清单过于琐碎的意见,试图把这个清单按节管理。如果你从来没有深入ASP.NET,你肯定不会知道所有ASP.NET问题的答案。如果你是一个独立顾问,你可能从来没有遇到过这些概念。但在我呆在科林斯的这4年中,这些问题我都遇到过。因此,是否全面理解这些问题也许与你是不是一个优秀的开发者没有关系,但在遇到问题时它的确可以帮你节省不少时间。



任何一个使用.NET的人

1) 描述线程与进程的区别?

线程(Thread)与进程(Process)二者都定义了某种边界,不同的是进程定义的是应用程序与应用程序之间的边界,不同的进程之间不能共享代码和数据空间,而线程定义的是代码执行堆栈和执行上下文的边界。一个进程可以包括若干个线程,同时创建多个线程来完成某项任务,便是多线程。而同一进程中的不同线程共享代码和数据空间。用一个比喻来说,如果一个家庭代表一个进程,在家庭内部,各个成员就是线程,家庭中的每个成员都有义务对家庭的财富进行积累,同时也有权利对家庭财富进行消费,当面对一个任务的时候,家庭也可以派出几个成员来协同完成,而家庭之外的人则没有办法直接消费不属于自己家庭的财产。

2) 什么是Windows服务,它的生命周期与标准的EXE程序有什么不同

Windows服务是运行在windows后台指定用户下(默认System)的应用程序,它没有标准的UI界面,想比标准的EXE程序,Windows服务是在服务开始的时候创建,而在服务结束的时候销毁,而且可以设置服务是否与操作系统一起启动,一起关闭。它支持三种方式:1)自动方式 2)手动方式 3)禁用 。自动方式的时候,windows服务将在OS启动后自动启动运行,而手动方式则必须手工启动服务,禁用的情况下服务将不能被启动。另外标准的EXE默认使用的当前登录的用户,而windows服务则默认使用System用户,这在对系统资源访问的时候特别需要注意。

3) Windows单个进程所能访问的最大内存量是多少?它与系统的最大虚拟内存一样吗?这对于系统设计有什么影响?

这个需要针对硬件平台,公式为单个进程能访问的最大内存量=2的处理器位数次方/2,比如通常情况下,32位处理器下,单个进程所能访问的最大内存量为:232 /2 = 2G 。单个进程能访问的最大内存量是最大虚拟内存的1/2,因为要分配给操作系统一半虚拟内存。

4) 什么是强类型,什么是弱类型?哪种更好些?为什么?

强类型是在编译的时候就确定类型的数据,在执行时类型不能更改,而弱类型在执行的时候才会确定类型。没有好不好,二者各有好处,强类型安全,因为它事先已经确定好了,而且效率高。一般用于编译型编程语言,如c++,java,c#,pascal等,弱类型相比而言不安全,在运行的时候容易出现错误,但它灵活,多用于解释型编程语言,如javascript,vb等

5) PID是什么?在做系统的故障排除时如何使用它?

PID是进程编号,在系统发现故障的时候,可以根据它寻找故障所发生的具体进程,并且可通过visual studio.net等ide将故障进程附加到进程中进行调试(debug)

6) 单个TCP/IP端口上能够被多少个进程侦听?

可以为多个,多个为端口复用 (多谢蛙蛙池塘的提醒)看下面代码

端口复用 Socket socket1 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); Socket socket2 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); socket1.Bind(new IPEndPoint(IPAddress.Parse("127.0.0.1"),8235)); socket1.Listen(10); socket2.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); socket2.Bind(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8235)); socket2.Listen(10); Console.Read();

7) 什么是GAC?它解决了什么问题?

Gloal Assembly Cache,全局应用程序集缓存。它解决了几个程序共享某一个程序集的问题。不必再将那个被共享的程序集拷贝到应用程序目录了,其实这道理很简单,.net应用程序在加载的时候,会首先查看全局应用程序集缓存,如果有就可以直接使用,没有再到应用程序目录进行查找。



中级.NET开发人员

1) 阐述面向接口、面向对象、面向方面编程的区别

面向接口更关注的是概念,它的原则是先定义好行为规范,再根据行为规范创建实现,严格的来说,面向接口应该是面向对象中的一部分吧,因为面向对象也强调的是依赖倒置原则,也就是实现依赖于抽象,而抽象不依赖于具体实现,更具比较的应该是面向接口与面向抽象对象,我的体会是面向接口更加灵活,但实现时候,稍微有些代码冗余,而面向抽象可以结合面向接口,先定义接口,再定义抽象类,在抽象类中处理一些公共逻辑,再实现具体实现类。面向对象是对复杂问题的分解。面向方面的编程是一种新概念,它解决了很多面向对象无法解决的问题,比如面向对象技术只能对业务相关的代码模块化,而无法对和业务无关的代码模块化。而面向方面正是解决这一问题的方案,它的关键思想是"将应用程序中的商业逻辑与对其提供支持的通用服务进行分离"。

2) 什么是Interface?它与Abstract Class有什么区别?

接口(Interface)是用来定义行为规范的,不会有具体实现,而抽象类除定义行为规范外,可以有部分实现,但一个类能实现多个接口,但只能继承一个父类

3) 什么是反射?

程序集包含模块,而模块又包括类型,类型下有成员,反射就是管理程序集,模块,类型的对象,它能够动态的创建类型的实例,设置现有对象的类型或者获取现有对象的类型,能调用类型的方法和访问类型的字段属性。它是在运行时创建和使用类型实例

4) 使用ASMX的XML Web服务与使用SOAP的.NET Remoting的区别?

Web服务使用的消息机制,而Remoting采用的RPC. Web Service能用于不同平台,不同语言,Remoting只适用于.Net。效率上Remoting高于Xml Web Service

5) 类型系统是由XMLSchema表示的吗?CLS是XMLSchema表示的吗?

不清楚

6) 从概念上阐述前期绑定(early-binding)和后期绑定(late-binding)的区别?

这个就像是强弱类型的比较相似,前期绑定是在编译的时候就确定了要绑定的数据,而后期绑定是在运行的时候才填充数据。所以前期绑定如果失败,会在编译时报编译错误,而后期绑定失败只有在运行时的时候才发生

7) 调用Assembly.Load算静态引用还是动态引用?

动态

8) 何时使用Assembly.LoadFrom?何时使用Assembly.LoadFile?

呵呵,这个比较有意思,相比LoadFile,LoadFrom则显得不地道,因为它娶媳妇的时候,是让人家穿上嫁妆,坐上马车,还得带着人家的妹妹来,:)用它加载的是程序集,这就要求同时将此程序集所依赖的程序集加载进来。而LoadFile就地道的多,它是加载程序集文件的内容,只将传入参数的文件加载,不考虑程序集依赖,但如果有相同实现,但位置不同的文件用LoadFrom是不能同时加载进来的,而LoadFile却可以。由于LoadFile加载的是文件,所以调用它之后,可能因为缺少必要的依赖造成无法被执行。

9) 什么叫Assembly Qualified Name?它是一个文件名吗?它有什么不同?

它不是一个文件名,相比文件名,Assembly Qualified Name(程序集限定名称),更能确定一个程序集,它包含文件名,但同时包含版本,公钥,和区域。因为同样一个名称的文件可能有不同的版本和区域,此时单独靠文件名称,可能会造成不能确定程序集的正确性。

10) Assembly.Load("foo.dll"); 这句话是否正确?

错误,正确的应该是Assembly.Load("foo"); 或者Assembly.LoadFrom("foo.dll"); (多谢 Tristan(Guozhijian)的提示更正)

11) 做强签名的assembly与不做强签名的assembly有什么不同?

强签名的程序集可以做成com,而不做强签名的就不行,同样强签名程序集可以安装到GAC中,而不做强签名的确不能。

12) DateTime是否可以为null?

不能,因为其为Struct类型,而结构属于值类型,值类型不能为null,只有引用类型才能被赋值null

13) 什么叫JIT?什么是NGEN?它们分别有什么限制和好处?

Just In Time 及时编译,它是在程序第一次运行的时候才进行编译,而NGEN是所谓的pre-jit,就是说在运行前事先就将生成程序集的本机镜像,并保存到全局缓存中,适用NGEN可以提高程序集的加载和执行速度,因为它可以从本机映像中还原数代码和数据结构,而不必像jit那样动态生成它们。感觉和缓存的道理大同小异。

14) Finalize()和Dispose()之间的区别?

Finalize()用于隐式释放资源,Dispose()用于显示释放资源 (Finalize()的确相当于C++中的析构函数(多谢Jeffrey Zhao提示更正)

15) using() 语法有用吗?什么是IDisposable?它是如何实现确定性终结的。

有用,实现了IDisposiable的类在using中创建,using结束后会自定调用该对象的Dispose方法,释放资源。不明白什么是确定性终结

16) tasklist /m "mscor*" 这句命令是干嘛的?

列出所有使用了以" mscor"作为开头的dll或者exe的进程和模块信息

17) in-proc和out-of-proc的区别

in-proc是进程内,进程内能共享代码和数据块,out-of-proc是进程外,进程外的互操作需要用进程间通讯来实现。

18) .NET里的哪一项技术能够实现out-of-proc通讯?

.Net Remoting技术或者WCF技术

19) ASP.NET在Windows XP, Windows 2000, Windows 2003上分别跑在哪个进程里面?

Xp : aspnet_Wp.exe Windows 2000 : aspnet_Wp.exe Windows 2003 : w3wp.exe


ASP.NET缓存:方法分析和实践示例

java060515收录,使用标签:.NET,时间:2008-6-30 11:34:54 | 相关网摘我也收藏

尽早缓存;经常缓存 您应该在应用程序的每一层都实现缓存。向数据层、业务逻辑层、UI 或输出层添加缓存支持。内存现在非常便宜 — 因此,通过以智能的方式在整个应用程序中实现缓存,可以获得很大的性能提高。 缓存可以掩盖许多过失 缓存是一种无需大量时间和分析就可以获得“足够良好的”性能的方法。

这里再次强调,内存现在非常便宜,因此,如果您能通过将输出缓存 30 秒,而不是花上一整天甚至一周的时间尝试优化代码或数据库就可以获得所需的性能,您肯定会选择缓存解决方案(假设可以接受 30 秒的旧数据)。缓存正是那些利用 20% 付出获得 80% 回报的特性之一,因此,要提高性能,应该首先想到缓存。

不过,如果设计很糟糕,最终却有可能带来不良的后果,因此,您当然也应该尽量正确地设计应用程序。但如果您只是需要立即获得足够高的性能,缓存就是您的最佳选择,您可以在以后有时间的时候再尽快重新设计应用程序。 页面级输出缓存 作为最简单的缓存形式,输出缓存只是在内存中保留为响应请求而发送的 HTML 的副本。其后再有请求时将提供缓存的输出,直到缓存到期,这样,性能有可能得到很大的提高(取决于需要多少开销来创建原始页面输出 - 发送缓存的输出总是很快,并且比较稳定)。 实现 要实现页面输出缓存,只要将一条 OutputCache 指令添加到页面即可。

<%@ OutputCache Duration="60" VaryByParam="*" %>

如同其他页面指令一样,该指令应该出现在 ASPX 页面的顶部,即在任何输出之前。它支持五个属性(或参数),其中两个是必需的。  Duration 必需属性。页面应该被缓存的时间,以秒为单位。必须是正整数。  Location 指定应该对输出进行缓存的位置。如果要指定该参数,则必须是下列选项之一:Any、Client、Downstream、None、Server 或 ServerAndClient。  VaryByParam 必需属性。Request 中变量的名称,这些变量名应该产生单独的缓存条目。"none" 表示没有变动。"*" 可用于为每个不同的变量数组创建新的缓存条目。变量之间用 ";" 进行分隔。 VaryByHeader 基于指定的标头中的变动改变缓存条目。

VaryByCustom 允许在 global.asax 中指定自定义变动(例如,"Browser")。 利用必需的 Duration 和 VaryByParam 选项的组合可以处理大多数情况。例如,如果您的产品目录允许用户基于 categoryID 和页变量查看目录页,您可以用参数值为 "categoryID;page" 的 VaryByParam 将产品目录缓存一段时间(如果产品不是随时都在改变,一小时还是可以接受的,因此,持续时间是 3600 秒)。这将为每个种类的每个目录页创建单独的缓存条目。每个条目从其第一个请求算起将维持一个小时。  VaryByHeader 和 VaryByCustom 主要用于根据访问页面的客户端对页面的外观或内容进行自定义。同一个 URL 可能需要同时为浏览器和移动电话客户端呈现输出,因此,需要针对不同的客户端缓存不同的内容版本。

或者,页面有可能已经针对 IE 进行了优化,但需要能针对 Netscape 或 Opera 完全降低优化(而不仅仅是破坏页面)。后一个例子非常普遍,我们将提供一个说明如何实现此目标的示例:  示例:VaryByCustom 用于支持浏览器自定义 为了使每个浏览器都具有单独的缓存条目,VaryByCustom 的值可以设置为 "browser"。此功能已经内置在缓存模块中,并且将针对每个浏览器名称和主要版本插入单独的页面缓存版本。

<%@ OutputCache Duration="60" VaryByParam="None" VaryByCustom="browser" %>

片段缓存,用户控件输出缓存 缓存整个页面通常并不可行,因为页面的某些部分是针对用户定制的。不过,页面的其他部分是整个应用程序共有的。这些部分最适合使用片段缓存和用户控件进行缓存。菜单和其他布局元素,尤其是那些从数据源动态生成的元素,也应该用这种方法进行缓存。如果需要,可以将缓存的控件配置为基于对其控件(或其他属性)的更改或由页面级输出缓存支持的任何其他变动进行改变。使用同一组控件的几百个页面还可以共享那些控件的缓存条目,而不是为每个页面保留单独的缓存版本。  实现 片段缓存使用的语法与页面级输出缓存一样,但其应用于用户控件(.ascx 文件)而不是 Web 窗体(.aspx 文件)。除了 Location 属性,对于 OutputCache 在 Web 窗体上支持的所有属性,用户控件也同样支持。用户控件还支持名为 VaryByControl 的 OutputCache 属性,该属性将根据用户控件(通常是页面上的控件,例如,DropDownList)的成员的值改变该控件的缓存。

如果指定了 VaryByControl,可以省略 VaryByParam。最后,在默认情况下,对每个页面上的每个用户控件都单独进行缓存。不过,如果一个用户控件不随应用程序中的页面改变,并且在所有页面都使用相同的名称,则可以应用 Shared="true" 参数,该参数将使用户控件的缓存版本供所有引用该控件的页面使用。 示例

<%@ OutputCache Duration="60" VaryByParam="*" %> 该示例将缓存用户控件 60 秒,并且将针对查询字符串的每个变动、针对此控件所在的每个页面创建单独的缓存条目。

<%@ OutputCache Duration="60" VaryByParam="none" VaryByControl="CategoryDropDownList" %>

该示例将缓存用户控件 60 秒,并且将针对 CategoryDropDownList 控件的每个不同的值、针对此控件所在的每个页面创建单独的缓存条目。

<%@ OutputCache Duration="60" VaryByParam="none" VaryByCustom="browser" Shared="true %>

最后,该示例将缓存用户控件 60 秒,并且将针对每个浏览器名称和主要版本创建一个缓存条目。然后,每个浏览器的缓存条目将由引用此用户控件的所有页面共享(只要所有页面都用相同的 ID 引用该控件即可)。 页面级和用户控件级输出缓存的确是一种可以迅速而简便地提高站点性能的方法,但是在 ASP.NET 中,缓存的真正灵活性和强大功能是通过 Cache 对象提供的。使用 Cache 对象,您可以存储任何可序列化的数据对象,基于一个或多个依赖项的组合来控制缓存条目到期的方式。这些依赖项可以包括自从项被缓存后经过的时间、自从项上次被访问后经过的时间、对文件和/或文件夹的更改以及对其他缓存项的更改,在略作处理后还可以包括对数据库中特定表的更改。


ASP.NET Web 应用程序与ASP.NET网站比较

java060515收录,使用标签:.NET,时间:2008-6-30 11:29:15 | 相关网摘我也收藏

●网站编译速度快,使用了增量编译模式,仅仅只有文件被修改后,这部分才会被增量编译进去。

●生成的程序集 WebSite:生成随机的程序集名,需要通过插件WebDeployment才可以生成单一程序集 WebApplication:可以指定网站项目生成单一程序集,因为是独立的程序集,所以和其他项目一样可以指定应用程序集的名字、版本、输出位置等信息

●可以将网站拆分成多个项目以方便管理

●可以从项目中和源代码管理中排除一个文件

●支持VSTS的Team Build方便每日构建

●更强大的代码检查功能,并且检查策略受源代码控制

●可以对编译前后进行自己规定的处理

●对App_GlobalResources 的Resource强类支持(网上说的,还没有了解过)

●直接升级使用VS2003构建的大型系统

WebSite编程模型的优点:

●动态编译该页面,马上可以看到效果,不用编译整个站点(主要优势)

●同上,可以使错误的部分和使用的部分不相干扰(可以要求只有编译通过才能签入)

●可以每个页面生成一个程序集(不会采用这种方式)

●可以把一个目录当做一个Web应用来处理,直接复制文件就可以发布,不需要项目文件(无所谓,只适合小站点)

●可以把页面也编译到程序集中(应该用不到,而且WebApplication也可以通过WebDeployment插件来实现)

两种编程模型的互相转换:

VS2005 SP1内置了转换程序,可以非常方便的从WebSite转换到WebApplication 只需要复制文件,右键执行“转换为Web应用程序”即可。未查到有专门的反向转换工具,但比较后发现如果转换也非常简单。

删除所有*.designer.cs 将*.aspx、*.ascx、*.master页面文件中的 Codebehind="FileList.aspx.cs" 批量替换成 CodeFile="FileList.aspx.cs"


.Net Compact Framework 高级篇—扩展SOAP应用

java060515收录,使用标签:.NET,时间:2008-6-30 11:27:23 | 相关网摘我也收藏

本文主要讲述如何在.Net CF中发送自定义的SOAP消息来调用WebService。可能大家对如何实现自定义的SOAP有一定的了解。但是在.Net CF中,有一些地方值得大家注意。

为何要实现自定义的SOAP呢?以及SOAP的好处在于?

一般调用WebService时,我们可以发送Http信息,也可以发送SOAP1.1/1.2信息。如果我们希望在调用某些方法时只针对于特定的用户时。那通常做法,在调用函数中加入一些判断参数,然后来判断是否是被授权的用户。使用自定义SOAP消息不但可以减少传入参数,可以在该方法调用前,就过滤掉,通知客户端,没有足够的权限。通常,我们可以将这些信息放到SOAP的header部分,传递到服务器端时,解析时,可以验证header部分的信息是否符合。

概念讲述那么多。通过代码来说明吧。

首先定义一个WebService。


1[WebService(Namespace = "http://tempuri.org/")]
2[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
3public class Service : System.Web.Services.WebService
4{
5 public MySoapHeader myHeader;
6
7 public Service () {
8 }
9
10 [WebMethod]
11 public string HelloWorld() {
12 return "Hello World";
13 }
14
15 [WebMethod, SoapHeader("myHeader")]
16 public string GetInfo(string userName)
17 {
18 return string.Format("Hello, {0}", userName);
19 }
20}
该Service中声明了2个方法,其中GetInfo就是验证SOAP的方法。在该Service中提供了一个MySoapHeader,这个是自定义的SOAP头,用于定义一些验证信息。为何这样定义,等下文中叙述。

实现完WebService后,该实现扩展的SOAP信息了。
1 public override void ProcessMessage(SoapMessage message)
2 {
3 switch (message.Stage)
4 {
5 case SoapMessageStage.AfterDeserialize:
6 break;
7 case SoapMessageStage.AfterSerialize:
8 break;
9 case SoapMessageStage.BeforeDeserialize:
10 Check(message);
11 break;
12 case SoapMessageStage.BeforeSerialize:
13 break;
14 default:
15 break;
16 }
17 }
18
19 private void Check(SoapMessage message)
20 {
21 if (message is SoapServerMessage)
22 {
23 MemoryStream ms = new MemoryStream();
24 System.IO.StreamWriter sw = new StreamWriter(ms);
25 StreamReader sr = new StreamReader(message.Stream);
26 char[] buffer = new char[(int)message.Stream.Length];
27 sr.Read(buffer, 0, (int)message.Stream.Length);
28
29 sw.Write(buffer, 0, buffer.Length);
30 sw.Flush();
31 message.Stream.Position = 0;
32 string sb = System.Text.Encoding.ASCII.GetString(ms.ToArray());
33
34 Debug.WriteLine(sb);
35
36 XDocument doc = XDocument.Parse(sb);
37 XNamespace name = "urn:com-appleseeker";
38 XNamespace soapheader = "http://schemas.xmlsoap.org/soap/envelope/";
39 MySoapHeader header = new MySoapHeader();
40
41 if (doc.Descendants(soapheader + "Header").Descendants().Elements(name + "userid").First() == null)
42 {
43 throw new Exception("");
44 }
45 header.userid = doc.Descendants(soapheader + "Header").Descendants().Elements(name + "userid").First().Value;
46
47 string[] temp = message.Action.ToString().Split('/');
48 string methodName = temp[temp.Length - 1];
49
50 if (header.userid == "0345")
51 {
52 }
53 else
54 {
55 throw new Exception("No Access");
56 }
57 }
58 }
这是服务器端的扩展的SOAP处理,必须重写一些方法,其中ProcessMessage中,在做BeforeDeserialize这一步操作时,解析接受到的SOAP消息。通常SOAP会有4部分操作。可以参考代码说列。
在验证消息时,从SOAP消息中取到内容,就是流中的内容,该流只读,可以通过复制到内存中来取得。当然,取道流的内容后,肯定是一个XML格式,通过对XML格式的文件解析方式,取到SOAP头部说含内容。这里我只验证userid=0345时,才能调用。否则则返回一个异常。

客户端部份相对简单。 1 public override void ProcessMessage(SoapMessage message)
2 {
3 switch (message.Stage)
4 {
5 case SoapMessageStage.AfterDeserialize:
6 break;
7 case SoapMessageStage.AfterSerialize:
8 break;
9 case SoapMessageStage.BeforeDeserialize:
10 break;
11 case SoapMessageStage.BeforeSerialize:
12 message.Headers.Add(new MySoapHeader() { userid = "0345" });
13 break;
14 default:
15 break;
16 }
17 }
只是在ProcessMessage的BeforeSerialize前加入头文件的内容。

自定义的SOAPHeader

1 [XmlRoot("MyHeader", Namespace = "urn:com-appleseeker")]
2 public class MySoapHeader: SoapHeader
3 {
4 public string userid;
5 public string username;
6 public string department;
7 }Namespace约定了在header部分的tag,通过定义,我们可以用它来解析。

我们做完了代码上的大部分活,接下来就是配置了,如何让WebService在接收到SOAP消息后,自动来解析呢,只需要在web.config中加入下面配置即可 1
2
3
4
5在add type中,第一个是自定义的扩展SOAP类名,需加命名空间,后面一个是程序集名

服务器端配置完成了。接下来就是客户端部分。
这里介绍下非Mobile程序如何使用,我创建一个控制台程序简单说明下,在客户端部分,有2种方式使用扩展SOAP。
1.可以像服务器端那样,自定义一个SOAP类,然后加入相应信息,再在app.config中加入相应配置即可。
2.在服务器的WebService的方法的Attribute中加入SoapHeader参数,表明可以使用的自定义SOAP头文件内容。
并在WebService中提供一个Public的自定义的头属性。在客户端只需要在调用时对自定义的头属性赋值即可。

在WM中,只能使用第2种方法来实现,不支持第1种方式。 1private void menuItem1_Click(object sender, EventArgs e)
2{
3 localhost.Service service = new SmartDeviceProject1.localhost.Service();
4 service.Url = service.Url.Replace("localhost", "192.168.0.157");
5 localhost.MySoapHeader myHeader = new SmartDeviceProject1.localhost.MySoapHeader();
6 myHeader.userid = "0345";
7 service.MyHeader = myHeader;
8 MessageBox.Show(service.GetInfo("Gordon"));
9}
以上在WM中就能使用自定义的SOAP消息了。各位在实际应用中如果遇到什么问题,可以参考我下面提供的代码。我在做Demo的过程中也或多或少遇到一些问题,大家可以相互探讨交流。

这篇文章的主旨在于,如何在WebService中验证用户信息。
在下一篇文章中,我可能会讲述如何在WCF中实现用户的验证。同样会基于.Net CF,希望大家能够留意。


- AppleSeeker''s Tech Blog - 博客园


详解Silverlight 2中的独立存储

java060515收录,使用标签:.NET,时间:2008-6-30 11:25:33 | 相关网摘我也收藏

独立存储(Isolated Storage)是Silverlight 2中提供的一个客户端安全的存储,它是一个与Cookie机制类似的局部信任机制。独立存储机制的APIs 提供了一个虚拟的文件系统和可以访问这个虚拟文件系统的数据流对象。Silverlight中的独立存储是基于 .NET Framework中的独立存储来建立的,所以它仅仅是.NET Framework中独立存储的一个子集。

Silverlight中的独立存储有以下一些特征:

1.每个基于Silverlight的应用程序都被分配了属于它自己的一部分存储空间, 但是应用程序中的程序集却是在存储空间中共享的。一个应用程序被服务器赋给了一个唯一的固定的标识值。基于Silverlight的应用程序的虚拟文件系统现在就以一个标识值的方式来访问了。这个标识值必须是一个常量,这样每次应用程序运行时才可以找到这个共享的位置。

2.独立存储的APIs 其实和其它的文件操作APIs类似,比如 File 和 Directory 这些用来访问和维护文件或文件夹的类。 它们都是基于FileStream APIs 来维护文件的内容的。

3.独立存储严格的限制了应用程序可以存储的数据的大小,目前的上限是每个应用程序为1 MB。

使用独立存储Silverlight中的独立存储功能通过密封类IsolatedStorageFile来提供,位于命名空间System.IO.IsolatedStorag中,IsolatedStorageFile类抽象了独立存储的虚拟文件系统。创建一个 IsolatedStorageFile 类的实例,可以使用它对文件或文件夹进行列举或管理。同样还可以使用该类的IsolatedStorageFileStream 对象来管理文件内容,

- TerryLee''s Tech Space - 博客园
更详细信息,请点击查看原文


盖茨正式宣布退休 与鲍尔默泪洒欢送会现场

java060515收录,使用标签:.NET,时间:2008-6-30 11:00:55 | 相关网摘我也收藏

据国外媒体报道,微软董事长比尔·盖茨(Bill Gates)向830名微软代表发表了告别演说,正式宣布辞去微软执行董事长的全职工作,并且追忆与史蒂夫·鲍尔默(Steve Ballmer)长久以来的友谊。当鲍尔默亲手交给盖茨一本大剪贴簿作为离别礼物时,两人都忍不住热泪奔流。

  在雷德蒙市微软的一间会议室里,盖茨与鲍尔默并排而坐,娓娓而谈微软历史上的某些时刻。中间他们将话题扯到了IBM,后者的第一批个人电脑装的是微软DOS操作系统,后来IBM采用了自己的操作系统,双方关系紧张起来。

盖茨正式退休,830名微软员工参加了这场欢送会

  盖茨说:“他们拿走了OS 2,给我们留下了Windows——大卫对战歌利亚的故事有了该有的结局。”这句玩笑话让全场830名微软员工哄堂大笑。

  盖茨,这位与保罗·艾伦(Paul Allen)在1975年建立了微软的公司创始人,承认微软今天已是蹒跚而行,不再那么完美无缺。“当我们与重大的变革擦肩而过,当我们没有伟大的领导人进行这种变革,对我们来说就是最危险的事情。这样的事情已经发生过很多次。没关系,但是——越少越好。”

  虽然告别了微软,但盖茨仍将担任非执行主席。他表示,仍将分担鲍尔默及克莱格·蒙迪(Craig Mundie)和雷·奥兹(Ray Ozzie)所选中的项目,其中一项将是互联网搜索业务——微软在这一市场上所占份额落后于谷歌和雅虎。

  “人们可能在想,微软将在互联网搜索市场上有所作为吗?”盖茨说,“我们将是最棒的。”他还再次强调,不愿再参与微软的日常事务。


张亚勤回忆盖茨往事:他有浓厚中国情结

java060515收录,使用标签:.NET,时间:2008-6-30 10:36:40 | 相关网摘我也收藏

编者按:北京时间6月25日晚间,正在美国参加微软公司董事长比尔•盖茨退休告别派对的微软全球资深副总裁、微软(中国)董事长及微软中国研发集团主席张亚勤昨晚通过越洋电话回忆了他与盖茨结识16年的部分往事。

  张亚勤在口述中,从对盖茨的印象、盖茨与中国的关系及展望鲍尔默时代的微软前景等方面向外界分享了很多小故事和细节。最让人印象深刻的是,张亚勤说,盖茨有浓厚的中国情结,并举了多个例子说明。

  本文由张亚勤口述,其中小标题为编者添加。

  我代表微软大中华区送别盖茨

  几天前,我和微软中国的几位同事一起来到了美国西雅图,这里是微软的全球总部,我们来参加盖茨的告别派对。明天(注:北京时间6月26日晚至6月27日)我要参加两场派对。第一场是在白天,由总部的一些员工及从全世界各地赶来的微软同事参加;另外一场在晚上,副总裁(VP)以上级别员工和家属参加。先向大家透露一下,我还会代表微软大中华区向盖茨赠送一件特别的礼物,至于是什么,先保密吧。

  盖茨的告别派对明天就要举办了,他也马上就要退休了,去专注他的慈善事业,但他也不是彻底退休,他还是微软的非执行董事长,每周还要来上一天班。回想起和盖茨打交道的16年,感慨万千。

  盖茨“闪烁着人性的智慧和光辉”

  我认识盖茨是在1992年,那时我还没到微软。初次见面是在亚特兰大的一个展览会上,我们就数字视频的传输和通信展开交流,盖茨把他对技术的理解、对市场的感觉,联系在一起,超越单个技术、单个产品的层次展开探讨,令我印象深刻。

1998年我加入微软后,回国和李开复博士一起创办微软亚洲研究院,2000年我开始担任院长向他汇报,盖茨对软件基础研究工作特别重视,所以和他交流就多了起来;2004年年初,我离开亚洲研究院调回美国,负责微软全球通信及嵌入式系统的开发,也就是现在很多人使用的Windows Mobile智能手机操作系统,那时他成了我的“导师”,这个项目也是直接向他汇报,所以有了更多的沟通。再到2006年,我又回到中国组建微软中国研发集团,并担任主席,我成了盖茨了解中国很重要的一个窗口。

  如果让我用一句话来评价盖茨,那就是他身上闪烁着人性的智慧和光辉。他是一个非常聪明的人,你在和盖茨谈话、沟通的时候,你可以感受到脑力场的发射。他很多次来中国,我都是全程陪同,他有时候问的问题很独特,思维方式和常人不同,有时候简单一句话就讲到我们中国很复杂的问题,涉及文化、历史、政治各个方面。我非常佩服他的智商、他的智力。

  盖茨的技术感觉很好,对产品的感觉很好,对市场等综合因素的把握游刃有余,我觉得这造就了他和别人的不同之处,盖茨简化问题的能力很厉害,不管是技术问题、产品问题还是市场问题,他都会用精炼的语言、很简单地把问题的实质提出来。他对技术、产品本身就有非常深入的理解,在我们讨论问题的时候,完全可以讨论得非常的细、非常深入。

  盖茨的中国情结

  盖茨有很浓厚的中国情结,他在九十年代初的时候,曾经只身一人跑到北京来。他这几年每次来中国都和学生有交流,他总是觉得中国的学生是世界上最聪明的学生,他还问我,为什么中国的学生这么聪明。他来中国有时也和中国一些领导人有些交流,他说中国领导人一定是世界上最强的,我相信他说的真心话,不是外交辞令,因为对他来说,已经没必要再为了什么目的说言不由衷的话了。

  我现在每次见到盖茨,他都会欣然接受我给他“洗脑”。比如十七大之后,我见到他就专门给他传达中国十七大的精神,两会之后我就和他讲讲两会的报告,他对中国很感兴趣,也让他能更多的理解中国。

  奥运会很快就要在北京举办了,他很早就买好了门票,到时候他会来中国看比赛。去年我陪同他参加博鳌亚洲论坛期间,他接受了CCTV的采访,主持人水均益问他来中国看奥运会,是希望中国队赢还是美国队赢,他回答说,乒乓球,肯定是中国赢;篮球,肯定是美国赢,睿智又幽默。

  对鲍尔默领导微软充满信心

  盖茨退休后,微软的担子就要交给鲍尔默了。盖茨和鲍尔默的关系非常紧密,亲如兄弟。鲍尔默是一个非常聪明,时刻饱满激情的人,他在哈佛读书时数学常考第一名,他对市场和销售更可以说有一种天赋。我和鲍尔默也有过很多交往,每次和他开完后,身上的能量感觉就能增加3个分贝。我对鲍尔默的领导充满信心,他将带领微软进入一个新时代。



共2901个网摘 [ 1  2  3  4  5  6 ... 97 ]  下一页

Tag/相关标签



    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京百联美达美数码科技有限公司 版权所有 京 ICP 证 020026 号
    Copyright © 2000-2006, CSDN.NET, All Rights Reserved