Joffre's tech weblog

持而盈之 不如其已

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  18 随笔 :: 27 文章 :: 62 评论 :: 5 引用

公告

2004年12月18日 #

SharePoint确实让人欢喜让人忧,繁琐的各种设置,足于让人晕倒!小弟有幸接触SPS超强功能的门户平台,也让我激动万分!真想说原来网站还可以这样做呀!废话连篇,言归正转,这只是在众多朋友的支持帮助下的一些心得。不对之处还多纠正。
我们主要讲述在一个应用了SPS的WEB APP中的一些配置(Portal中的设置与通过代码访问WSS对象模型时的设置)
1.在Portal中的匿名访问设置其实很简单,
  首先,确保IIS中Portal Site的身份验证不为匿名访问,因为IIS如果启用匿名,则Portal Site中的Site Setting将不可见(无权限),当然我们在IIS中只设置windows 集成访问即可,这时我们进入Portal Site中的Site Setting,进入“管理安全性和附加设置”>>”更改匿名访问设置”,选择第二项“区域、内容和搜索”。
  再次,如果您要访问TeamSite的内容的话,也要对相应的Sites进行设置。同样进入“Site Setting“>>“转到网站管理”>>“更改匿名访问”,选择可访问“整个网站”
至于,代码中的配置,小弟整理一下再放上。
终于有点空来补充未完成的部分
2.在代码中的设置
     a. 在web.config中设置<authentication mode="None" />
     b. 在要调用WSS对象模型前模拟管理员用户,具体代码如下:
WindowsImpersonationContext  wic = CreateIdentity (SPSHelper.GetSpsUi
d,SPSHelper.GetDomainName,SPSHelper.GetSpsPwd).Impersonate();

虚拟管理员用户 虚拟管理员用户

3.Portal 与 TeamSite设置完毕后,最后把IIS启用“匿名访问”与“window集成访问”!大功告成,访问web app时,服务器自动启用匿名访问登录,在要访问SPS时用Impersonate 访问。

posted @ 2004-12-18 16:05 Hanks 阅读(1371) 评论(1) 编辑

背景
        在我参与的一个项目中,这个项目是基本BS结构的WEB应用系统,经常会出现在Session丢失的情况,即使用户在操作的过程中也会出现超时现象。
原因
        我们的系统要运行在负载平衡的 Web 场环境中,而系统配置文件web.config中的Session状态却设置为InProc(即在本地存储会话状态),导至在用户访问量大时,Session常经超时的情况。引起这个现象的原因主要是因为用户通过负载平衡IP来访问WEB应用系统,他在某段时候在某台服务器保存了Session的会话状态,但在其它的WEB前端服务器中却没有保存Session的会话状态,而随着并发量的增大,负载平衡会当作路由随时访问空闲的服务器,结果空闲的服务器并没有之前保存的Session会话状态。
解决方案
       1.当您在负载平衡的 Web 场环境中运行 ASP.NET Web 应用程序时,一定要使用 SqlServer 或 StateServer 会话状态模式,在项目中我们基于性能考虑并没有选择SqlServer模式来存储Session状态,而是选择一台SessionStateServer 服务器来用户的Session会话状态。我们要在系统配置文件web.config中设置如下:
<sessionState mode="StateServer" cookieless="false" timeout="240" stateConnectionString="tcpip=192.168.0.1:42424" stateNetworkTimeout="14400" />

还要添加一项
<machineKey validationKey="78AE3850338BFADCE59D8DDF58C9E4518E7510149C46142D7AAD7F1AD49D95D4" decryptionKey="5FC88DFC24EA123C" validation="SHA1"/>

       2. 我们同时还要在SessionStateServer 服务器中启动ASP.NET State Service服务,具体设置:控制面板>>管理工具>>服务>>ASP.NET State Service,把它设为自动启动即可。
       3. 每台前端WEB服务的Microsoft“Internet 信息服务”(IIS)设置
             要在 Web 场中的不同 Web 服务器间维护会话状态,Microsoft“Internet 信息服务”(IIS) 配置数据库中 Web 站点的应用程序路径(例如,\LM\W3SVC\2)与 Web 场中所有 Web 服务器必须相同。大小写也必须相同,因为应用程序路径是区分大小写的。在一台 Web 服务器上,承载 ASP.NET 应用程序的 Web 站点的实例 ID 可能是 2(其中应用程序路径是 \LM\W3SVC\2)。在另一台 Web 服务器上,Web 站点的实例 ID 可能是 3(其中应用程序路径是 \LM\W3SVC\3)。因此,Web 场中的 Web 服务器之间的应用程序路径是不同的。我们必须使Web 场Web 站点的实例 ID 相同即可。你可以在IIS中把某一个WEB配置信息保存为一个文件,其他Web 服务器的IIS配置可以来自这一个文件。您如果想知道具体的设置请访问Microsoft Support网站:http://support.microsoft.com/default.aspx?scid=kb;zh-cn;325056
posted @ 2004-12-18 15:51 Hanks 阅读(1869) 评论(0) 编辑

概述
Cache作为ASP.Net应用程序状态管理之一的方法,管理瞬间状态的高速缓存对象,在并发量大,效率要求较高的Application应用较广。
Cache除了与Application一样是一个简单的键、值对的HashTable之外,还有其独特之处:
1. Cache可以基于依赖项的终止
  依赖项可以是其他的Cache关键字、文件或者是时间戳。如果Cache的依赖项发生改变或终止,该项Cache内容就会无效并移除。
2. 锁定管理
  ASP.net是多线程系统,当多个线程同时访问Cache时,必然应用锁定防止同时更新。这个问题Appliction的解决方法是用Lock()和UnLock()方法来锁定,当然,Cache不同,其可以自行管理内部锁定,所以更新Cache时,程序员不用做任何操作。
3. CallBack回调
该功能可以在Cache被删除时运行代码。

应用
如何把Cache应用到我们的实现工作中呢?偶目前正在做一个KMS项目,并发量很大且对速度效率要求很高,在前台展现方面可能会出现性能瓶颈。为此,我们考虑应用SQL Server 2000生成XML文件,并把XML存入高速缓冲(Cache),前台展现只从XML文档获取数据,这样可以减少访问数据库,同时读取Cache中的数据,速度也可以保证。下面是其中一段代码,仅供参考。
protected void RefreshCache (string key, object item,CacheItemRemovedReason reason) 
    

        
string filename="c:\abc.xml";
        XmlDocument xmldoc
=new XmlDocument();

        xmldoc.Load(filename);
        

        CacheXml.Insert(
                
"CacheName"
                ,xmldoc
                ,
new CacheDependency (filename)
                ,Cache.NoAbsoluteExpiration
                ,Cache.NoSlidingExpiration
                ,CacheItemPriority.Default
                ,
new CacheItemRemovedCallback (RefreshCache) 
                );

    }

posted @ 2004-12-18 15:40 Hanks 阅读(1852) 评论(4) 编辑

     在得知我们将要做的项目要应用Microsoft Solutions Framework (MSF)团队模型时,我不禁有点迷惑,MSF是什么东西。难道它真的像微软说的一样,MSF是成功团队的保证。
     现在项目已经成功完成了第一期,回首项目从零开始做到交付客户使用的整个过程,确实让我感受到了MSF的重要。本人以前大大小小的项目也也做过,那时规范与计划经常在我们项目中谈起,但是实际工作中似乎却很难做到。几乎所有的项目都会延期,成本提高了,同时也存在巨大的风险。
     这是第一次参与用Microsoft Solutions Framework (MSF)模型来管理项目团队,当时很迫不急待想了解成功的开发团队模型是如何做到的。项目初期,项目经理特别给我们培训了二天,关于项目管理、MSF。我也是从那时才了解我们的开发模型是由六个小组组成。



1.Development(开发小组):
     主要负责:技术咨询、体系结构与方案设计、应用程序开发与基础架构开发。
     质量目标:对产品规范的交付
2.Test(测试小组):
     主要负责:测试计划、测试实施、测试报告。
     质量目标:解决所有问题之后的发布
3.ReleaseManagement(部署管理小组):
     主要负责:对系统软硬件方面的基础架构、服务运营、发布管理等
     质量目标:顺利的部署和前进中的管理

4.UserExperience(用户教育小组):
        主要负责:在系统软硬件使用方面对用户进行培训、教育,本地化,用户界面设计
        质量目标:增强的用户表现
5. Product Management (产品管理)
      主要负责:客户的代言人、进行系统的需求调研,完成系统的业务需求报告,产品规划。
      质量目标:满意的客户
6. Program Management (程序管理)
      主要负责:项目管理、过程管理、风险控制等
      质量目标:在项目约束内的交付
看上去是不是和我们原先做项目也差不多,每个步骤都要经历过,就是没有有效地进行项目管理[续]。
posted @ 2004-12-18 15:21 Hanks 阅读(712) 评论(0) 编辑

     对于KMS而言,在技术层面来说,知识的存储、展现与搜索是系统的核心部分。由于我们的KMS project采用ASP.net+SPS+SQL Server技术结构,通过调用WSS对象模型把知识文档存储在Portal Server中。我们现在要讨论的知识的展现层,主要是在匿名模式访问WebApplication且客户端并未加入域的情况下,打开Office文档时所会碰到的问题及解决方法。

      正常情况下,我们会通过直接访问文档的URL方式,在IE中打开。如:Http://localhost/sites/beijing/kms.doc在IE地址栏上敲入以上链接,可真接访问kms.doc文档。虽然可以打开浏览但是却需要用户验证信息,即AD帐号,当然在弹出验证框后点取消,同样可以浏览文档。那是为什么呢?我们通过NetMon抓包发现,Word、Excel会主动发起认证请求,由于客户端并没有登录到域,所以会返回401认证失败,导致要用户验证。要怎么来解决这个问题(弹框)呢?那只好把客户端全加入到域,一切OK!其它方法小弟没招了,能解决的朋友还望能指点一二。
小弟的Project中要让客户端加入到域,那客户准会砍人。这样一来正常情况是没法解决了,怎么办呢?
       当然第二种办法马上出场,前面谈到Word、Excel要认证请求,如果能通过在背后代码中通过模拟AD帐号来实现用户验证(Impersonate),不就避免了弹框验证了吗?再用下载文档方式打开,哈哈!好像可以。马上就试!~~~~~~~~~~~~~~~~编码完毕!调试运行,弹框问题没了,但却发现每次打开文档都会弹出一个下载框,要求打开还是保存按钮。且要经历SPS->服务器端->客户端的下载过程,对于一些大Document就死定了,挑剔的客户当然很不悦,放言对面就是地雷我们也要踩过去。我们也像是热锅里的蚂蚁--急。
       天无绝人之路,请教了一下MS牛人们终于找到了一点解决方法:用vc写一个控件,用IE脚本调用,该控件利用了platform SDK提供的一个叫URLDownloadToCacheFile  
http://msdn.microsoft.com/library/default.asp?url=/workshop/networking/moniker/reference/functions/urldownloadtocachefile.asp 的方法,将该文件下载到本地临时文件夹中,然后调用相关程序打开这个文件。

就这种问题解决了,客户也爽了!这只是小弟的这点心得,希望能给碰到类似问题的人带去一点见解。
在此向帮助本人所有人说声谢谢!

posted @ 2004-12-18 15:13 Hanks 阅读(819) 评论(1) 编辑