专心、专注、专业

  博客园 :: 首页 :: 联系 :: 订阅 订阅 :: 管理
  18 Posts :: 2 Stories :: 32 Comments :: 2 Trackbacks

公告

昵称:探索人生
园龄:4年6个月
粉丝:0
关注:1

搜索

 
 

常用链接

我的标签

最新评论

阅读排行榜

评论排行榜

推荐排行榜

2010年5月21日 #

当使用log4net+spring.net+Nhibernate组合的时候,如果发生异常,经过层层传递,以及Spring对异常的包装,如果直接使用

                LogManager.GetLogger(typeof(_Default)).Error(ex.Message, ex);

来记录异常信息的话,通常记录不了,猜测的原因(并没有深究。。。):ex有内部异常,且这个异常经过了nhibernate和spring包装之后,log4net无法从内部堆栈中找出最原始的异常,所以导致log4net记录不了这个异常,那么我们就采用以下形式记录:

                LogManager.GetLogger(typeof(_Default)).Error(ex.Message, ex.InnerException == null ? ex : ex.InnerException);

就能解决这个问题!

posted @ 2010-05-21 23:47 探索人生 阅读(192) 评论(0) 编辑

  通常,如果nhibernate和log4net同时出现的话,nhibernate通常会自动用log4net输出信息,这样的话,会和通过应用程序输出的日志混杂在一起。因为nhibernate会默认使用root下的appender。但是,我们可以通过配置其它的logger来控制nihibernate的输出,如下配置:(这个配置是log4net连接到sql2008的一个配置文件)

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
  </configSections>
 
  <appSettings/>
  <connectionStrings/>
  <system.web>

  </system.web>

  <log4net>

    <root>
      <level value="ALL" />
      <appender-ref ref="ADONetAppender" />
    </root>
   
    <!--Nhibernate的日志配置开始-->
   
<!--additivity是 子Logger 是否继承 父Logger 的 输出源(appender) 的标志位。具体说,默认情况下子Logger会继承父Logger的appender,
    也就是说子Logger会在父Logger的appender里输出。若是additivity设为false,则子Logger只会在自己的appender里输出,
    而不会在父Logger的appender里输出。 -->
    <logger name="NHibernate" additivity="false">
      <level value="WARN" />
      <appender-ref ref="ADONetAppender" />
    </logger>
    <logger name="NHibernate.SQL" additivity="false">
      <level value="ERROR" />
      <appender-ref ref="ADONetAppender" />
    </logger>
    <!--Nhibernate的日志配置结束-->

    <appender name="ADONetAppender" type="log4net.Appender.ADONetAppender">
      <bufferSize value="0" />
      <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
      <connectionString value="server=localhost;database=SummerData;user id=sa;password=P@ssw0rd;Connect Timeout=15;" />
      <commandText value="INSERT INTO LogMessage ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />
      <parameter>
        <parameterName value="@log_date" />
        <dbType value="DateTime" />
        <layout type="log4net.Layout.RawTimeStampLayout" />
      </parameter>
      <parameter>
        <parameterName value="@thread" />
        <dbType value="String" />
        <size value="255" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%thread" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@log_level" />
        <dbType value="String" />
        <size value="50" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%level" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@logger" />
        <dbType value="String" />
        <size value="255" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%logger" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@message" />
        <dbType value="String" />
        <size value="4000" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%message" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@exception" />
        <dbType value="String" />
        <size value="2000" />
        <layout type="log4net.Layout.ExceptionLayout" />
      </parameter>
    </appender>

  </log4net>
</configuration>

 

posted @ 2010-05-21 13:36 探索人生 阅读(173) 评论(0) 编辑

2010年5月9日 #

  由于sharepoint2010需要64位环境,只能寄希望于虚拟机了。可惜vpc不支持64位guest os,hyper-v只能运行在win2008R2上,而我的host是win7的32位系统。那么就用回VMWare了。

  下载VMWare7.0之后安装,一阵折腾,顺利的装上64位的win2008R2,继续装好sharepoint2010。可是过程中发现重大问题,vmware经常会卡死,导致host系统失去响应!而且guest系统感觉效率非常差,慢的一塌糊涂!然后就尝试调整cpu核心数量以及虚拟化引擎,依然如故!

  这时,我考虑是不是因为我的host是32位操作系统,导致vmware这么慢呢?因为以前用过一段时间vmware,感觉它的速度还是非常快的。干脆,趁周末玩把大的!把host系统换成win7 64位的!

  又是一阵折腾,host也变成64位操作系统,把vmware开启,运行虚拟机,哇塞,一切正常了!再也不卡了。。。。。。。

  流水账一篇,备忘而已。。。。。。。

posted @ 2010-05-09 16:16 探索人生 阅读(222) 评论(0) 编辑

2010年5月2日 #

背景介绍:

  当使用QuickPart部署Webpart的时候,我们可以通过wspbuilder将QuickPart打包进wsp,并且通过feature直接部署webpart,这样QuickPart既不需要安装到GAC,也不需要在Sharepoint中添加部件时候重新再选择一次所需控件了。我把QuickPart放在80目录的bin下,如图:

但是,如果通过wspbuilder生成的wsp然后再deploy,在页面上添加部件的时候,会报错,“请求失败”PermissionCheck异常等信息。

 

尝试解决:

  

  既然是没有权限,那么我们最简单直接的方式就是把信任等级改成这样:<trust level="Full" originUrl="" />,但是这样会带来很多安全隐患,不推荐这样做。有没有其它的解决方式呢?我们来研究下wsp包的生成和部署方式。

  WspBuilder生成wsp包的时候,会把相应dll申请的权限打包进wsp包中,等到deploy这个wsp包的时候,wspbuilder就会修改站点下的Web.Config文件,将信任等级修改如下:

<trust level="WSS_Custom" originUrl="" />,然后WSS_Custom就会指向一个由wspbuilder生成的新的策略文件(路径在web.config里面能够找到),在这个策略文件里面定义了dll、webpart等的权限。

  那么wspbuilder怎么知道dll需要使用哪些权限呢,是通过读取dll的程序集信息获取的。在我们dll的项目文件里面都会有AssemblyInfo.cs文件,在这里会记载程序集的版本信息,我们也可以在这里添加程序集所需要使用的信息。大致判断出,QuickPart是因为搜索了某些没有目录的权限导致的,那么我给QuickPart源代码的AssemblyInfo.cs文件添加权限信息,在这个文件的最后,我添加这么一行:

[assembly: FileIOPermission(SecurityAction.RequestMinimum, Unrestricted=true)]

这句话的含义是:文件读取权限没有限制。关于FileIOPermissionAttribute可以自行查询帮助。

通过这样设置之后,重新编译QuickPart,生成wsp包,部署(之前先卸载并删除已部署的wsp),经过测试仍然不行,那么我在QuickPart的AssemblyInfo.cs文件的最后再添加两行:

[assembly: SharePointPermission(SecurityAction.RequestMinimum, Unrestricted=true)]

[assembly: SecurityPermission(SecurityAction.RequestMinimum, Unrestricted=true)]

把Sharepoint的权限和安全权限都加上无限制的定义,但是,很遗憾经过测试,依然不行,希望有精通策略文件的大虾能告知! 

 

最终方案:

  通过修改程序集信息调整策略文件权限的办法行不通,那么只好做出最后一招了,将QuickPart部署到GAC,这样的话,相当于FullTrust了,所以,程序终于能够正常运行。

  当然,将QuickPart部署到GAC也不需要我们手工做,通过wspbuilder都可以一键式帮你傻瓜化完成,只要把QuickPart从80\bin目录下移到GAC目录下,在部署WSP包的时候,自动会帮你部署到GAC中。QuickPart最终放置位置如下:

posted @ 2010-05-02 00:50 探索人生 阅读(128) 评论(0) 编辑

2010年4月24日 #

  在ASP.Net程序中实现自动登录,需要以下几个步骤:

第一:

  IIS中取消“启用匿名访问”,启用“集成Windows身份验证”。

第二:

  配置web.config,加入以下标记元素:

  <system.web>

    <authentication mode="Windows" />
    <identity impersonate="true" />

  </system.web>

 <identity impersonate="true" />是用来做身份模拟的,这样在web程序的代码中,可以通过Context.User.Identity.Name获取到已登录的windows身份信息的用户名。

posted @ 2010-04-24 20:54 探索人生 阅读(442) 评论(1) 编辑

2010年4月12日 #

  用Feature部署EventHandler的时候,因为Scope只能等于Web,所以,这里大家要注意,激活的时候,必须针对使用的单个网站激活,而不能在网站集上激活,有几个网站要使用必须分别激活。如下,有localhost网站以及子网站solutions要使用这个EventHandler的话,必须激活两次!

stsadm -o activatefeature -filename EventHandler\Feature.xml -url http://localhost/

stsadm -o activatefeature -filename EventHandler\Feature.xml -url http://localhost/Solutions

还有,用Feature安装EventHandler之后,在页面上的网站集功能里面是看不到的,通过SharePoint Manager 2007这个工具是能够看到EventHandler是否安装成功,所以,不要界面看不到就以为没有安装成功。

posted @ 2010-04-12 22:46 探索人生 阅读(115) 评论(0) 编辑

2010年4月7日 #

摘要: 在项目中,通过QuickPart来使用Webpart是一件很愉快的事情,但是,在Webpart越来越多的时候,就会有一些小困扰,比如用户控件列表项是杂乱无序的,对于在众多的控件中找到我们需要的控件是一件很有挑战的事情。 由于QuickPart是开源的,所以,我针对源代码进行了一些调整,实现了两个小功能:1. 增加用户控件列表项目的排序功能,可以根据文本或者值来排序,且支持升序或者降序。2. 增加用...阅读全文
posted @ 2010-04-07 11:12 探索人生 阅读(907) 评论(0) 编辑

2009年11月12日 #

摘要: 主体内容引用自:http://www.cnblogs.com/chenchaospr/archive/2008/04/29/1176631.html,稍作调整  第一步:部署WebPart的dll文件。第一种部署方式是部署到bin目录里面,这种方式部署的webpart只能归当前的虚拟服务器使用;步骤:拷贝dll文件:在打开虚拟服务器的根目录,比如c:\inetpub\www,然后新建一个bin目录...阅读全文
posted @ 2009-11-12 13:30 探索人生 阅读(300) 评论(0) 编辑

2009年11月4日 #

摘要: 最近学习MOSS中,参照园子里这位兄弟的大作一步步尝试(http://www.cnblogs.com/gaoweipeng/archive/2009/10/24/1588672.html),进行到创建完网站集之后,准备设置网站的各项信息时,出现错误提示,比如,点击“管理导航”按钮,出现简洁明了的错误提示,几个小字“未找到文件”。  于是乎,我根据当前...阅读全文
posted @ 2009-11-04 11:23 探索人生 阅读(632) 评论(0) 编辑

2008年6月5日 #

摘要: 最近开始捣鼓PHP,于是乎,先要配置好运行开发环境,鉴于现在系统是Vista,决定先在Vista上跑,有空再在虚拟机里面在装个ubuntu来跑php。在Vista中配置这个环境可是搞了我一晚上啊,在这里记下来以后备查,希望也能够给大家带来一丝帮助,足矣。 Linux下的东西崇尚的是手工活,大多数都是文本操作,连配置都不例外。所以,在Linux下的整个安装过程,需要用到很多的手工动作,极端的锻炼大家...阅读全文
posted @ 2008-06-05 01:07 探索人生 阅读(3158) 评论(4) 编辑