RSS 2.0 Feed
2005-05 Entries
摘要:当我们在SPS中使用QueryProvider、或者调用SPS Search Web Service接口,在自己的代码里面调用SPS的检索功能的时候,通常会头疼如何写出正确语法的SPS Search Sql语法。其实一个简单好用的方法是,首先直接在SPS页面上使用自带的高级搜索页面按照自己想要的条件进行搜索,然后在结果页面上,查看页面的HTML源码,然后搜索一下一个名字叫做“schspssSQPH”的hidden field,这个field里面的值就是你需要的正确的检索语句。当然,你还需要把一些编码后的特殊字符重新替换过来,比如将“"”重新换成双引号。另,想在SPS 2003服务器上安装Windows 2003 SP1的朋友注意了。如果在您的部署模式中,SqlServer 2000和SPS 2003并非部署在一台服务器上,那么如果在安装了SPS 2003的Windows 2003服务器上安装Windows 2003 SP1后,SP1默认会阻止SPS 2003访问SqlServer 2000服务器。关于这个问题,已经有一个SPS 2003 hotfix(kb:885263)被发布出来了。...[阅读全文]

posted @ | Feedback (11) | Filed Under [ SharePoint ]

摘要:在博客园看到了一位园友写的文章《如何处理OutOfMemoryException异常?》,于是想和大家交流一下ASP.NET中出现OutOfMemoryException的问题。实际上,在ASP.NET Web服务器上,ASP.NET所能够用到的内存,通常不会等同于所有的内存数量。在machine.config配置文件中,配置节<processModel>中有一个属性“memoryLimit”,这个属性的值是一个百分值,默认为“60”,即指定了ASP.NET进程(在任务管理器中大家就可以看到ASP.NET的进程,IIS5中为aspnet_wp,IIS6中为w3wp)能够使用所有物理内存的60%。当ASP.NET使用的内存量超过这个限额时,IIS会开始自动回收(recycle)进程,即创建一个新的进程去负责应付Http请求,而将旧进程所占用的内存回收。当我们有一台很大内存的服务器时,“memoryLimit”这个值是需要进行适当的调整的。比如我们准备了一台4G内存的服务器,那么4G×60%=2.4G。但是,对于Win32操作系统,一个进程所能占用的所有内存空间只有2G。当ASP.NET进程占用的内存开始达到2G时,由于它并没有达到2.4G的“回收阈值”,所以IIS不会启动recycle进程操作,但是由于Win32的限制,实际上已经不能给这个进程分配更多的内存了,于是,OutOfMemoryException就很可能会被抛出了。为了避免这样的情况,我们就必须将“memoryLimit”适当调小,以让IIS更早的进行进程回收。微软推荐的ASP.NET进程占用内存是不超过60%,并最好使计算出的实际值不超过800M。就是说,对于一台4G内存的服务器,最好将“memoryLimit”属性设置成“20”。设置一个适当的回收阈值,让IIS适时的进行进程回收,对于保证整个服务器的稳定运行,避免OutOfMemoryException是非常重要的。在IIS6中,ASP.NET进程的回收阈值不再由配置节中的“memoryLimit”属性决定,而是由IIS管理器中的应用程序池配置中的设置决定。但是,即使正确设置了这些配置,也不能保证完全避免OutOfMemoryException的发生,原因可能是多样而复杂的,比如内存回收操作可能耗时太多等等。开发人员要注意的,就是在代码中时刻牢记不要无谓的使用和浪费内存。:)如果你有一台大内存的服务器,同时对Win32操作系统中对于进程最高使用2G内存的限制很郁闷,可选的解决方法有两个:1、使用/3GB模式启动计算机,方法参加文后的链接2、使用Windows Server 2003 64bits Edition资源链接:Microsoft IIS 5.0 Process Recycling Tool,使IIS5具有类似IIS6的进程监视回收功能Microsoft KB: Information on Application Use of 4GT RAM TuningMicrosoft KB: 4 GB RAM 调试功能和物理地址扩展开关介绍...[阅读全文]

posted @ | Feedback (11) | Filed Under [ ASP.NET ]

摘要:在阅读之前,请先阅读我写过的第一篇有关Indigo的文章,当然,如果看过更之前的有关Contract-First的文章能更好的理解Indigo。 自从上次的那篇Indigo的文章到现在已经过去了一个月,在这个月里面,VS2005 Beta2已经发布了,而Indigo开发组也正在努力向Indigo Beta1前进。这篇文章中,代码和相关的描述仍然以VS2005 Feb CTP+Indigo Mar CTP为基础。 Data Contract是用来定义Indigo Service与Client端之间用来交换的数据的格式,如果我们需要传递自定义的数据,那么就需要将其定义为符合Indigo规范的Data Contract。数据里面的每一个数据项,被成为Data Member。 [DataContract]public class UserInfo{    [DataMember]    public String FirstName;     [DataMember]    public String LastName;     [DataMember]    private DateTime Birthday;} 上面的代码示范创建了一个UserInfo类,并且使用“[DataContractAttribute]”特性对类进行了修饰,对于需要被加入到Contract中的数据项,也使用“[DataMemberAttribute]”特性进行了标记。 值得注意的是,UserInfo有一个特意的设计,那就是Birtyday这个属性,其访问域被定义为private的,但是我们仍然使用了“[DataMemberAttribute]”来标记它。private的访问域控制并不会影响其成为Data Contract中的一个Member。一个属性即使是public的,但是如果没有被“[DataMemberAttribute]”来标记,那么这个属性也不会成为Data Contract中的一个数据项。就是说,我们可以认为基于类的可见性控制,和其是否是Data Contract中的一项Data Member是没有关系的。属性的值是否会在Indigo Service和Client间进行传递,只和它是否是属于Data Contract中的一项Data Member有关系。 然后我们开始定义Service Contract: [ServiceContract]public interface IProfileService{    [OperationContract]    UserInfo GetUserByID(Int32 userID);} public class ProfileService : IProfileService{     public UserInfo GetUserByID(Int32 userID)    {        UserInfo user = new UserInfo();        user.FirstName = "Kaneboy";        user.LastName = "Tu";        user.Birthday = new DateTime(1979, 1, 1);         return user;    }} 上面的代码创建了一个IProfileService接口,然后定义这个接口为Service Contract,接着通过一个ProfileService类实现IProfileService接口,让其成为Service Contract的具体实现类。像这样将Service Contract定义在一个接口上,而并非是一个具体的类上,是更常见的方式。 由于这篇文章将重点放在Data Contract的定义之上,所以Indigo Service剩下的.svc和配置文件的内容,就不再详叙,大家参考上一篇Indigo的文章即可。 我们创建一个Console成为作为Indigo Client,通过svcutil这个命令行工具,自动生成所需的proxy类文件。在自动生成的文件中,我们可以找到UserInfo这个类,由于它被定义成为了Data Contract,所以svcutil会自动帮我们创建它。svcutil的使用方法和客户端app.config的定义,也请参加上一篇Indigo文章。 最后,我们在Main()中调用Indigo Service: ProfileServiceProxy proSvcPrx = new ProfileServiceProxy("IProfileService");UserInfo user = proSvcPrx.GetUserByID(1); OK,我们成功验证了Data Contract的概念和基本的使用方法。下一篇Indigo系列文章,我将讲述如何在Client端不使用svcutil.exe这个工具,而手工书写Service Contract和Data Contract,以进一步验证Service和Client端交换的是Contract和Schema,而并非Class,这样一个基本理念。...[阅读全文]

posted @ | Feedback (4) | Filed Under [ Indigo ]