2005年11月18日

1、c# 2.0对于泛型的支持
      c# 2.0 中提供的泛型的支持是在运行时,它不同于c++在编译时提供的静态模板,也不同于Java在编译器层面使用的"搽拭法"支持的简单泛型。

      c# 2.0支持的泛型包括类、结构、接口、委托共四种泛型类型,以及方法成员。

      c# 2.0的泛型采用“类型、接口、构造器、值类型/引用类型”的约束方式来实现对类型参数的“显式约束”,它不支持c++模板那样的基于签名的隐式约束。

2、匿名方法
      匿名方法是使我们可以以“内嵌”方式来编写代码,将代码直接于委托实例相关联。

      参数列表可以为空,为空时一定要不写。

      匿名方法的返回值必须和委托的返回值兼容。

      匿名方法可以捕获外部变量。

3、委托类型的推断
      委托实例化时,可以省略掉委托类型,直接采用方法名,c# 2.0 可以做合理的推断。

4、yield
      有点混的。

posted @ 2005-11-18 23:45 qigo4c 阅读(67) | 评论 (0)编辑

2005年11月17日

     今天在写存储过程的时候遇到了一个郁闷的问题,花了很多时间找原因。

1declare @sql
2select @sql=@sql+'hello world'

      这段代码,最后得到的@sql为null,郁闷了,null+文本=null,呵呵!

posted @ 2005-11-17 23:09 qigo4c 阅读(47) | 评论 (0)编辑

1、什么是需求?
      什么是需求,这个概念比较难,没有确切的定义。需求可以人认为是从用户和开发者两种角色来进行看待的内容。需求仅仅是在脑海中一种模型、一种叙述。

2、需求的种类?
      需求的大致种类,可以分为业务需求、用户需求、功能需求。
      业务需求指的是组织机构或者客户对系统产品的高层次的目标要求。
      用户需求指的是用户使用产品必须完成的功能。
      功能需求定义了开发人员必须实现的软件功能。

3、需求开发的过程
      问题的获取--》分析--》编写规格说明--》验证--》变更

4、客户对需求分析的权利
      要求分析人员使用符合客户语言习惯的表达。
      要求分析人员了解客户的业务及目标。
      要求分析人员编写软件需求规格说明。
      要求得到需求开发结果的解释说明。
      要求开发人员尊重你的意见。
      要求开发人员对需求及产品实施提供建议,拿出主意。
      描述产品易使用的特性。
      调整需求,允许重用已有的软件组件。
      要求对变更的代码提供真实可信的评估。
      获得满足客户功能和质量要求的系统。

5、客户对需求的义务
      给分析人员讲解你的业务。
      抽出时间清楚地说明并完善需求。
      准确而详细地说明需求。
      及时的做出决定。
      尊重开发人员的需求可行性及其成本评估
      划分需求优先级别
      评审需求文档和原型
      需求出现变更要马上联系
      应遵循开发组织处理需求变更的过程
      尊重开发人员采用的需求工程过程

posted @ 2005-11-17 20:48 qigo4c 阅读(45) | 评论 (0)编辑

2005年11月10日

     今天在使用enterprise library时,遇到了无法访问注册表的异常。出现的原因是asp.net运行的帐户是network service,没有对HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib 的访问权限,search了一下,找到相关的两篇文章。
http://blogs.msdn.com/chabrook/archive/2005/10/25/484813.aspx

http://bartholomew.cnblogs.com/archive/2005/08/20/218884.aspx

总结一下解决方法

1. 运行安装Enterprise Library时安装的“InstallServices.bat”批处理文件,也就是使用installutil将组件注册
2. 去掉Common工程中USEWMI、USEEVENTLOG和USEPERFORMANCECOUNTER三个编译参数,重新编译EntLib。
3. 调整Network Service和Performance Log Users 和 Performance Monitor Users的权限,使之能够访问注册表的HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib
4. 一种不能保证一定不会发生其他错误的方法,适用于当你无法更改服务器权限的情况,在web.config中的appSettings节中添加Microsoft.Practices.EnterpriseLibrary.Configuration.ConfigurationManager.ApplicationName的键值为应用程序名,主要的原因是:

After looking at the code in that PerformanceCounterInstances.CurrentInstanceName method, I noticed that they do not try to get the name of the current process using the Process.GetCurrentProcess().ProcessName property if you specify an application name with an appSettings variable in your web.config with a key of “Microsoft.Practices.EnterpriseLibrary.Configuration.ConfigurationManager.ApplicationName”.

第一种和第二种方法,我都尝试过,比较简单,

posted @ 2005-11-10 20:48 qigo4c 阅读(184) | 评论 (0)编辑

2005年11月1日

        前段时间做了一个网页爬虫,初次接触,收获了很多知识。其中关于HTTP协议的内容,记述如下:

        RFC2616中主要描述了HTTP 1.1协议。下面的描述没有实现其各个方面的内容,只提出了一种能够完成所有HTTP网页抓取的最小实现(不能够抓取HTTPS)。

        1、首先提交一个URL地址,分为普通的GET网页获取,POST的数据提交两种基本模式。

建立HttpWebReques实例,其中uri是网页的URL的地址:
   HttpWebRequest webrequest = (HttpWebRequest) WebRequest.Create(uri);

KeepAlive表示HTTP的连接是长连接:
   webrequest.KeepAlive = true;

如果需要,添加引用地址,主要用于防止其他网站的连接引用,比如登陆时,经常需要验证:
   if(referer!=null)
   {
    webrequest.Referer=referer;
   }

选择数据的提交方式,有GET、POST两种方式,HEAD不常用:
   switch(RequestMethod)
   {
    case 1:
     webrequest.Method="GET";
     break;
    case 2:
     webrequest.Method="POST";
     break;
    case 3:
     webrequest.Method="HEAD";
     break;
    default:
     webrequest.Method="GET";
     break;
   }

设置User-Agent,经常遇到,在某些网站中,做了限制,User-Agent为空,则不能访问:
   webrequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322; .NET CLR 2.0.50215; fqSpider)";

添加其他的HTTP的Header信息,collHeader是一个NameValue的Collection:
   if(collHeader!=null&&collHeader.Count>0)
   {
    int iCount = collHeader.Count;
    string key;
    string keyvalue;
 
    for (int i=0; i < iCount; i++)
    {
     key = collHeader.Keys[i];
     keyvalue = collHeader[i];
     webrequest.Headers.Add(key, keyvalue);
    }
   }

设置Content-Type的内容,如果为POST,设置成application/x-www-form-urlencoded,如果是Get设置成text/html:
   if(webrequest.Method=="POST")
   {
    webrequest.ContentType="application/x-www-form-urlencoded";
   }
   else
   {
    webrequest.ContentType = "text/html";
   }
   
 
设置代理服务器地址和端口:
   if ((ProxyServer!=null) &&(ProxyServer.Length > 0))
   {
    webrequest.Proxy = new
     WebProxy(ProxyServer,ProxyPort);
   }

设置是否允许自动转移:
   webrequest.AllowAutoRedirect = true;

设置基本的登陆认证 :
   if (NwCred)
   {
    CredentialCache wrCache =
     new CredentialCache();
    wrCache.Add(new Uri(uri),"Basic",
     new NetworkCredential(UserName,UserPwd));
    webrequest.Credentials = wrCache;
   }  

设置Request的Cookie容器:
   webrequest.CookieContainer=Cookies;

设置POST数据:
   byte[] bytes = Encoding.ASCII.GetBytes(RequestData);
   webrequest.ContentLength=bytes.Length;
 
   Stream oStreamOut = webrequest.GetRequestStream();
   oStreamOut.Write(bytes,0,bytes.Length);
   oStreamOut.Close();


上面笼统的介绍,重新组合一下,可以实现GetText和GetBinary两种请求

posted @ 2005-11-01 20:10 qigo4c 阅读(194) | 评论 (0)编辑

        在这里安家,主要是关于工作当中的遇到的一些问题、得到的经验的记述。有空的时候,我会添加一些翻译稿以及一些摘抄过来的代码库及其使用方法。
       

posted @ 2005-11-01 19:47 qigo4c 阅读(54) | 评论 (0)编辑