kenlistian

勤学多思

  IT博客 :: 首页 :: 新随笔 ::  :: 聚合  :: 管理 ::
  412 随笔 :: 0 文章 :: 23 评论 :: 0 Trackbacks

#

firfox里需要装的几样插件

一.信息搜集.

  Google Notebook - 随时收集资料,以供后用,好处是不必报存在本地机器上,在任何地方,只要有电脑即可翻出。
  google tools   里面有个书签,好处就是在任何一台电脑登录到google帐户可以获取。

二.文章撰写.
  Scribefire - 如果是在windows环境下,我还是建议装live,没有必要装这个东东了。如在linux下那就装了吧,
                                       总比比gedit好一点点。 不需要每次打开博客去粘贴更新吧,离线更新最快。

  Copy Plain Text - 滤去网页上的任何格式,让你能够复制纯文本,感觉可有可无,一般我是直接那个notepad或者
                   gedit 粘贴在复制即解决.

三.图片处理.
Web Developer - 原本是个网页设计辅助工具,但是我们可以利用里面和图象有关的功能,比如查看图片信息,图片原始链接等.

Picnik -   一键抓取可见网页或整个网页,你还可以在电脑,Flickr相册,Picasa网络相册或网络上的其他地方提取和编辑图片,而不用下载他们.
                               我没有装。一般save as 即可。
posted @ 2008-04-04 00:09 kenlistian 阅读(288) | 评论 (0)编辑 收藏

一Ajax开发,目前有4种模式,

1.XMLHTTP+WebForm
       最基本的开发模式.开发者直接用javaaScript操作XMLHTTP对象,向服务器端的某个ASP.NET页面发出异步请求.服务器端也面接收请求,进行处理,再把处理结果返回给XMLHTTP对象,最后用JavaScript语言代码把返回的结果显示出来。

(zc add)    不见得是用javascript,用vbscript操作xmlhttp也是一样,对服务端的后台页面做业务要求,asp,php都可以做,不见得是asp.net.处理页面,用javascript也好,vbscript也好,php,ruby也好,都是组织ui显示。

2.XMLHTTP+HttpHandler
这是对上一种方式的改进.客户端没有变化,服务器端改用HttpHandler接收和处理异步请求.这样可以降低服务器资源的消耗,减轻服务器的压力,加快服务器的响应时间。

(zc add)这个httphandler没用过。

3.Call Back
   这是ASP.NET 2.0新增加的开发方式.它要求页面实现ICallbackEventHandler接口,页面中的脚本就可以采用Call Back的机制调用服务器端,这样可以避免开发者直接操纵XMLHTTP对象。在一定程度上简化了Ajax开发。

  (zc add )没用过,不过和微软的atlas一样,都是必须躺在微软的床上作为的

4.采用Ajax框架

    基于Ajax的应用程序架构。

   (zc add)  用! 选哪一款呢

二Ajax从框架上的划分

浏览器端框架被划分成两大类:(说白了,就是有的侧重UI,有的侧重内部数据交互方式)

·应用程序框架: 提供浏览器的功能,但是常以包括窗口小部件抽象和另外的部件而出名,其功能主要围绕桌面GUI框架。

·基本结构框架: 提供基本的管道和可移植的浏览器抽象,让开发者去创建内容。典型的功能:

                          * 针对XMLHttpRequest的包装器以封装浏览器-服务器的交互。(所有的框架都提供这一功能)。

                          * XML操作和查询。

                          * 根据来自XMLHttpRequest的应答执行DOM操作。

                          * 在一些情况中,与另外的浏览器端技术如Flash(和潜在的Java applets)集成在一起。

 

而服务器端框架通常以下面两种方式工作(尽管它们在这里根据语言的不同进行了分类):

·HTML/JS生成:  服务器提供完整的HTML/Javascript代码生成和浏览器-服务器协调,结果是只有浏览器端编码可以被定制。

·远程调用:         Javascript调用直接被路由到服务器端功能(例如Java方法)并返回到Javascript回叫处理器;
                           或者Javascript调用服务器以提取信息,例如会话细节,数据库查询等。

·纯Javascript:    应用程序框架

 

三。目前Ajax框架:(太多,商业要钱的是不错,但是没银子。)

商业级

1.Backbase

2.Bindows

3.JackBe NQ Suite

4.Tibco General Interface

商业级别框架,描述有:

     四种工具包的核心都是很相似的,它们都围绕标准的用户界面实用程序构建而成。根据它们的定义,所有这些工具包都对DOM(文档对象模型)树进行操作,因此它们都要接受HTML的指导,而且要在浏览器中实施。所有这些工具包都采用严格的商业风格,几乎没有体现出早期 JavaScript开发中所具备的特质。(?)它们之间的区别在于与服务器的集成。一些工具包要求服务器以Web服务的方式对数据进行打包。而有的工具包则可以提供广泛的服务器框架,而这些框架可将客户端应用与公司的数据库和机器集成在一起。所有这些工具包都集成了主要的服务器技术,如特定层次的JSP和PHP,但有些产品还提供更为广泛的支持。(与服务的内部数据处理交互矣)

    至于那一款更好,只有再仔细甄别了:http://tech.51cto.com/art/200612/36247.htm

 

开源级:

  ( http://blog.csdn.net/WilliamRaym/archive/2005/09/30/492634.aspx

    (http://www.duduwolf.com/post/AJAX_Frameworks.asp

  太多了,而且感觉杂乱无须,在浏览器端采用ajax,而在服务端均有不同语言组织数据与其交互的封装和处理,

不过,排名十大开源框架有(http://subject.csdn.net/ajaxframework.htm

1.prototype

2.Dojo

3.Mootools

4.JQuery

5.Dwr

6.Buffalo

7.Yui

8.Ext

9.Qooxdoo

10.Spry

至于使用来说,也只有使用的人才能感觉好坏和喜好,列出一个比较

http://www.blogjava.net/chenxiaojun/archive/2008/01/08/173561.html

posted @ 2008-04-03 16:45 kenlistian 阅读(242) | 评论 (0)编辑 收藏

微软致力于简化Ajax风格Web应用的开发,并提供丰富的、可交互的和个性化的用户体验。开发者可以对客户端脚本不甚了解;但他们可以很容易地开发和调试这种应用程序。
  出于这一目的,微软启动了一个新的项目,研发代号“Atlas”。Atlas为开发这带来了如下特性:
  ·Atlas客户端脚本框架
  ·Atlas的ASP.NET服务器控件
  ·ASP.NET Web Services集成
  ·Atlas的ASP.NET构建块
  ·客户端构建块服务
  Atlas是编写丰富的、可交互的和个性化的Web浏览器应用程序的最好方式。

       Atlas是微软提供的一个工具包,用来完成Ajax的功能。从微软的Scott Guthrie的blog上看来,这个东西应该是ASP.NET 2.0里面的。Scott肯定地表示,“Atlas客户端脚本框架(Client Script Framework)可以运行在所有的现代浏览器上并且何以与任何Web服务器交互”,这说明他们正在以跨浏览器的态度来开发Ajax风格的远程脚本,这无疑是一个巨大的转变;过去的微软,把任何东西都搞成了特定于IE的,而一旦其开发工具能够真的提供彻底的跨浏览器支持,将能够笼络更多的ASP.ENT 开发者,他们无需了解任何细节就可以创建跨浏览器代码。

      Atlas客户端脚本框架是可扩展的,100%面向对象的JavaScript客户端脚本框架,允许开发这很容易地构建拥有丰富的UI工能并且可以连接Web Services的Ajax风格浏览器应用程序。使用Atlas,开发者可以使用DHTML、JavaScript和XMLHTTP来编写Web应用程序,而无须掌握这些技术的细节。
 

      Atlas客户端脚本框架可以在所有的现代浏览器上运行,而不需要Web服务器。它还完全不需要安装,只要在页面中引用正确的脚本文件即可。
  Atlas客户端脚本框架包含下列组件:
  ·一个可扩展的和新框架,其中为JavaScript添加了很多新特性,如生存期管理、集成、多播事件处理器和接口
  ·一个基础类库,提供了通用特性,如丰富的字符串操作功能、计时器和运行任务等
  ·一个UI框架,可以跨浏览器实现动态行为
  ·一个网络栈,用于简化对服务器的连接和对Web Services的访问
 

   微软为ASP.NET应用程序专门设计了一组Ajax风格的服务器控件,并且加强了现有的ASP.NET页面框架和控件,以便支持Atlas客户端脚本框架。
  ASP.NET 2.0中有一项称作异步客户端回调的新特性,使得构建无中断的页面变得很容易。异步客户端回调包装了XMLHTTP,能够在很多浏览器上工作。 ASP.NET本身包括了很多使用回调的控件,包括具有客户端分页和排序功能的GridView和DetalsView控件,以及TreeView空间的虚拟列表支持。
  Atlas客户端脚本框架将完全支持ASP.NET 2.0回调,但微软希望进一步增强浏览器和服务器之间的集成性。例如,你可以将Atlas客户端控件的数据绑定指定为服务器上的ASP.NET数据源控件,并且可以从客户端异步地控制Web页面的个性化特征。
  和任何客户端应用程序一样,一个Ajax风格的Web应用程序通常也需要访问Web服务器的一些功能。Atlas应用程序连接服务器的模型和其他平台类似,都是使用Web Services来实现。


  通过ASP.NET Web Services集成,Atlas应用程序将可以在任何支持XMLHTTP的浏览器上通过Atlas客户端将本框架来直接访问任何宿主于ASP.NET的asmx或Indigo服务。该框架将会自动处理代理和脚本到对象、对象到脚本的序列化问题。通过使用Web Services集成,开发者可以使用单一的编程模型来编写Web Services,并且在任何应用程序中使用它们,不论是基于浏览器的站点上还是智能客户端应用程序中。
  在ASP.NET 2.0中,微软构建了一组丰富的构建块服务(Building Block Services),这使得构建强大、个性化的Web应用程序变得不可思议的简单。这些构建块极大地降低了在开发通用的Web应用程序过程中需要编写的代码数量,比如管理用户、通过角色验证用户和存储用户的个性化设置信息等。
  使用Atlas,我们可以在任何浏览器上的任何客户端应用程序中向访问Web Services那样访问这些功能。例如,如果你正在开发一个站点,来显示用户的TO-DO项目,你可以使用ASP.NET的Profile服务来将他们存放在服务器上的用户自定义配置文件中。这样即使用户从一台机器上转移到另一台机器上,也同样可以访问这些项目。
  微软将提供的服务包括(全部是基于ASP.NET 2.0的):
  - Profile:在服务器上存放每个用户特有的数据
  - UI个性化:在服务器上存放个性化的UI设置信息
  - 验证:验证用户
  - 角色:基于用户的角色验证用户任务和提供不同的UI
  由于这些构建块是服务器端的,开发者需要对他们应用和其他站点一样的安全模型。这些服务不需要客户端下在任何东西——只要在浏览器中引用脚本代理即可。


  所有的ASP.NET 2.0构建块服务都是可插拔的,这使用一种通用的提供者模型可扩展模式在后台实现。微软提供的内建提供程序允许开发这使用SQL Server数据库或Active Directory作为存储容器,开发者也可以很容易地插接自己的提供程序。例如,你可能希望使用集群而不是数据库服务器来存放用户的配置文件,这时你只需将你的提供程序插接近来即可。除了DHTML、JScript和XMLHTTP,微软还提供了一组附加的服务来加强客户端的功能并提供增强的体验。
  对于这样的服务,本地浏览器缓存就是一个很好的例子。当启用了本地浏览器缓存时,Web站点就可以将内容存储到缓存中,并在需要的时候很快地取出。但浏览器并未提供向缓存中存放数据的API,而且象Google Map或OWA这样的应用程序不得不通过很多工作产生一个唯一的URL才能使浏览器缓存它。在Atlas中,微软提供了可编程的本地存储/缓存,因此应用程序可以很方便、有效并且安全在本地缓存数据。

我来说:微软的东西,只能跑在IIS之下,也必须背着.NET到处跑才能干活的事情。

posted @ 2008-04-03 16:00 kenlistian 阅读(228) | 评论 (0)编辑 收藏

SQL Server连接中的四个最常见错误:


一."SQL Server 不存在或访问被拒绝"

有以下几种可能性:
1,SQL Server名称或IP地址拼写有误
2,服务器端网络配置有误
3,客户端网络配置有误

要解决这个问题,遵循以下的步骤来一步步找出导致错误的原因.
1,检查网络物理连接
ping <服务器IP地址/服务器名称>
ping <服务器IP地址> 不成功,说明物理连接有问题, 这时候要检查硬
件设备,如网卡,HUB,路由器等. 还有一种可能是由于客户端和服务器之间
安装有防火墙软件造成的, 如ISA Server.防火墙软件可能会屏蔽对ping,telnet
等的响应

因此在检查连接问题的时候,我们要先把防火墙软件暂时关闭,或者打开
所有被封闭的端口.

如果ping服务器IP地址成功而ping服务器名称失败,则说明名字解析有问题,
这时候要检查DNS服务是否正常.有时候客户端和服务器不在同一个局域网里面,
这时候很可能无法直接使用服务器名称来标识该服务器,这时候我们可以使用HOSTS文件来进行名字解析,

具体的方法是:
1.使用记事本打开HOSTS文件(一般情况下位于C:\WINNT\system32\drivers\etc).
添加一条IP地址与服务器名称的对应记录,如:
172.168.10.24 myserver
2.或在SQL Server 的客户端网络实用工具里面进行配置,后叙

其次,使用 telnet 命令检查SQL Server服务器工作状态
telnet <服务器IP地址> 1433
如果命令执行成功,可以看到屏幕一闪之后光标在左上角不停闪动,这说明
SQL Server 服务器工作正常,并且正在监听1433端口的TCP/IP连接

如果命令返回"无法打开连接"的错误信息,则说明服务器端没有启动SQL Server服务,
也可能服务器端没启用TCP/IP协议,或者服务器端没有在SQL Server 默认的端口1433上监听.


2.检查服务器端的网络配置,检查是否启用了命名管道.是否启用了TCP/IP 协议等等,利用
SQL Server自带的服务器网络使用工具来进行检查.

点击:程序 -- Microsoft SQL Server
-- 服务器网络使用工具
打开该工具后,在"常规"中可以看到服务器启用了哪些协议.

一般而言,我们启用命名管道以及 TCP/IP 协议.
点中 TCP/IP 协议,选择"属性",我们可以来检查SQK Server服务默认端口的设置
SQL Server 默认的1433端口. 选中"隐藏服务器",意味着客户端无法通过枚举服务
器来看到这台服务器,但不影响连接.

3. 在客户端检查客户端的网络配置
利用SQL Server自带的客户端网络使用工具来进行检查,
点击:程序 -- Microsoft SQL Server
-- 客户端网络使用工具
打开该工具后,在"常规"项中,可以看到客户端启用了哪些协议.
一般而言,我们同样需要启用命名管道以及TCP/IP协议.

点击TCP/IP协议,选择"属性",可以检查客户端默认连接端口的设置,
该端口必须与服务器一致.单击"别名"选项卡,还可以为服务器配置
别名.服务器的别名是用来连接的名称, 连接参数中的服务器是真正
的服务器名称,两者可以相同或不同.别名的设置与使用HOSTS文件
有相似之处.

补充点,其实很多客户端是不装sql server客户端的,在客户端用telnet连接上而客户程序连不上,
估计是ms sql版本需要打补丁。
或者下载本地机器sqldb驱动版本太低,在2000下好像数据库驱动版本太低,
特别是98的机器还需要打个组件包。
(判断该问题方法是在本机上装个sql server的客户端,配置下客户端连接上看看,一般装完客户端再用
自己的客户端软件都能通过,这也说明是本机sql驱动版本太低或没有。)

二."无法连接到服务器,用户xxx登陆失败"
该错误产生的原因是由于SQL Server使用了"仅Windows"的身份验证方式,
因此用户无法使用SQL Server的登录帐户(如sa)进行连接.解决方法如下所示:
1.在服务器端使用企业管理器,并且选择"使用 Windows 身份验证"连接上SQL Server
操作步骤:
在企业管理器中
--右键你的服务器实例(就是那个有绿色图标的)
--编辑SQL Server注册属性
--选择"使用windows身份验证"
--选择"使用SQL Server身份验证"
--登录名输入:sa,密码输入sa的密码
--确定

2.设置允许SQL Server身份登录
操作步骤:
在企业管理器中
--展开"SQL Server组",鼠标右键点击SQL Server服务器的名称
--选择"属性"
--再选择"安全性"选项卡
--在"身份验证"下,选择"SQL Server和 Windows ".
--确定,并重新启动SQL Server服务.

在以上解决方法中,如果在第 1 步中使用"使用 Windows 身份验证"连接SQL Server 失败,
那就通过修改注册表来解决此问题:
1.点击"开始"-"运行",输入regedit,回车进入注册表编辑器
2.依次展开注册表项,浏览到以下注册表键:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\MSSQLServer]
3.在屏幕右方找到名称"LoginMode",双击编辑双字节值
4.将原值从1改为2,点击"确定"
5.关闭注册表编辑器
6.重新启动SQL Server服务.

此时,用户可以成功地使用sa在企业管理器中新建SQL Server注册,
但是仍然无法使用Windows身份验证模式来连接SQL Server.
这是因为在 SQL Server 中有两个缺省的登录帐户:
BUILTIN\Administrators
<机器名> \Administrator 被删除.

要恢复这两个帐户,可以使用以下的方法:

1.打开企业管理器,展开服务器组,然后展开服务器
2.展开"安全性",右击"登录",然后单击"新建登录"
3.在"名称"框中,输入 BUILTIN\Administrators
4.在"服务器角色"选项卡中,选择"System Administrators"
5.点击"确定"退出
6.使用同样方法添加 <机器名> \Administrator 登录.

说明:
以下注册表键:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\MSSQLServer\LoginMode
的值决定了SQL Server将采取何种身份验证模式.
1.表示使用"Windows 身份验证"模式
2.表示使用混合模式(Windows 身份验证和 SQL Server 身份验证).


-----------------------------------------------------------------------------
三.提示连接超时

如果遇到第三个错误,一般而言表示客户端已经找到了这台服务器,并且可以进行连接,
不过是由于连接的时间大于允许的时间而导致出错.
这种情况一般会发生在当用户在Internet上运行企业管理器来注册另外一台同样在Internet上的服务器,
并且是慢速连接时,有可能会导致以上的超时错误.有些情况下,由于局域网的网络问题,也会导致这样的错误.

要解决这样的错误,可以修改客户端的连接超时设置.
默认情况下,通过企业管理器注册另外一台SQL Server的超时设置是 4 秒,
而查询分析器是 15 秒(这也是为什么在企业管理器里发生错误的可能性比较大的原因).

具体步骤为:
企业管理器中的设置:
1.在企业管理器中,选择菜单上的"工具",再选择"选项"
2.在弹出的"SQL Server企业管理器属性"窗口中,点击"高级"选项卡
3.在"连接设置"下的"登录超时(秒)"右边的框中输入一个比较大的数字,如 20.

查询分析器中的设置:
工具 -- 选项
-- 连接
-- 将登录超时设置为一个较大的数字

---------------------------------------------------------------------------------

四.大部分机都用Tcp/ip才能成功,有次我发现用Named Pipes才可以?
这是因为在WINDOWS 2000以后的操作系统中,MS为解决SQL SERVER的安全问题将TCP/IP配置
为SQLSERVER的默认连接协议,你可以在CLIENT NETWORK UTILITY中看到TCP/IP和NAME PIPE
的顺序。

你也可以在:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\SuperSocketNetLib]
"ProtocolOrder"=hex(7):74,00,63,00,70,00,00,00,00,00
看到默认的协议。

2.怎么在程序中更改Named Pipes,Tcp/ip
你可以在上面提到的注册表的位置修改:
CLIENT端:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\SuperSocketNetLib]
"ProtocolOrder"=hex(7):74,00,63,00,70,00,00,00,00,00

SERVER端:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\MSSQLServer\SuperSocketNetLib]
"ProtocolOrder"=hex(7):74,00,63,00,70,00,00,00,00,00

posted @ 2008-04-03 10:05 kenlistian 阅读(16514) | 评论 (0)编辑 收藏

iis中500解决方法

1. 最简单的方法,打开iis,把应用程序安全系数调到 "低",一般可以解决。

不过这种方法只是治标不治本,但是可以应急。

2.否则,需要分析原因,打开事件查看器,观察系统消息报什么错误,

在我的机子上看到的是:

进程外应用程序 '/LM/W3SVC/1/ROOT' 意外终止。
有关此消息的详细信息,请访问 Microsoft 联机支持站点:

也就是说启动进程外的程序发生失败,而这属于典型的密码不一致错误。

原因在于:当IIS 管理器中被被设置为"中"(共用)或"高"(隔离)保护级别运行时,当Dllhost.exe 进程被启动时,IWAM 帐户(iis启动进程帐号)在使用dllhost.exe 的进程时,如果此帐户的密码与元数据库中和本地 SAM 中的不一样,那些设置为以"中"或"高"保护级别运行的应用程序(称为"进程外应用程序")便无法启动。

下面摘抄再细致的分析:

IWAM账号建立后被Active Directory、IIS metabase数据库和COM+应用程序三方共同使用,账号密码被三方分别保存,并由操作系统负责这三方保存的IWAM密码的同步工作。按常理说,由操作系统负责的工作我们大可放心,不必担心出错,但不知是BUG还是其它什么原因,系统的对IWAM账号的密码同步工作有时会失败,使三方IWAM账号所用密码不统一。

解决方法,

1.改IWAW密码

2.执行IIS中的脚本,这是修改iis中元数据中密码

adsutil SET w3svc /WAMUserPass "111"

3.改com+所用到的密码

使用脚本synciwam.vbs,
cscript synciwam.vbs [-v|-h]
"-v"参数表示详细显示脚本执行的整个过程(建议使用),
"-h"参数用于显示简单的帮助信息。
我们要同步IWAM_MYSERVER账号在COM+应用程序中的密码,只需要执行"cscript synciwam.vbs -v".

原文http://www.nowfox.com/Look.aspx?ID=293

另:由于自己vbs扩展被被note++捆绑了,一般来说需要恢复vbs脚本运行,需要做以下2步:

1)在C:\WINDOWS\inf\wsh.inf,右键"安装";
2)regsvr32 urlmon.dll shdocvw.dll jscrīpt.dll vbscrīpt.dll /s
即可解决,
或者找个安全软件,将关联恢复即可。
posted @ 2008-04-01 10:35 kenlistian 阅读(268) | 评论 (0)编辑 收藏

对反射机制一直搞不懂这个名词是啥意思。抽空看了看,

反射的定义:审查元数据并收集关于它的类型信息的能力。元数据(编译以后的最基本数据单元)就是一大堆的表,当编译程序集或者模块时,编译器会创建一个类定义表,一个字段定义表,和一个方法定义表等。System.reflection命名空间包含的几个类,允许你反射(解析)这些元数据表的代码 。

反射的作用:
1. 可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型
2. 应用程序需要在运行时从某个特定的程序集中载入一个特定的类型,以便实现某个任务时可以用到反射。
3. 反射主要应用与类库,这些类库需要知道一个类型的定义,以便提供更多的功能。
举个最简单的例子,
比如说,你从数据库读一一个字符串"Form1",你想根据这个字符串弹出一名字是"Form1"的窗体。
你就要用到反射了。

posted @ 2008-03-31 16:13 kenlistian 阅读(181) | 评论 (0)编辑 收藏

采用nethttp去处理数据时,常常会报出 rbuf_fill报出timeout错误。ruby跳出执行。

其实解决方法很简单,有3种,

第一种方法,加异常保护,不允许ruby弹出。
直接在方法体中加入
....

rescue Interrupt=>e
  (or Timeout::Error =>e 不认得Timeout则需加require 'Timeout',为啥,后面讲)
  ....
end


第二种是加Timeout::timeout处理,再包一层,

response = Timeout::timeout(3){
    Net::Http.get(....)
     ....
     }

rescue Timeout::Error=>e
   puts e.message
rescue =>e
   ...
end


第三种解决方法,打开protocol.rb,就是那个报rbuf_fill的那个地方,修改代码
def rbuf_fill
timeout(@read_timeout)  {
@rbuf << @io.sysread(1024)
}
end

def rbuf_fill
timeout(@read_timeout,ProtocolError) {
@rbuf << @io.sysread(1024)
}

end
加一个参数;因为ProtocolError是继承StandardError类异常,而rescue能够扑捉到,
而原函数中timeout是默认Error类异常,看原timeout函数
  def timeout(sec, exception=Error)
。。。。
end
其中raise抛出的是Error类错误,而Error是来自  Error<Interrupt,而Interrupt,属于enscue无法扑捉到的,
所以改为standardError则可以扑捉到。

其实理解了,不过在写程序如果异常保护无法保护时,用else 或者根据跳出错误类型在rescue下就可以了。
,或者干脆从异常Exception类下拦截,而不是从standarderror类拦,就可以杜绝任何异常了。


			
posted @ 2008-03-27 21:29 kenlistian 阅读(1076) | 评论 (0)编辑 收藏

t = Thread.new do
i=0
while true
#sleep 1

puts "printing a line, #{i.to_s}"
i+=1
#sleep 1
end
end

gets
t.exit
puts "exiting"

这个例子来自http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/229801

就是在windows下,加上sleep就不会在dow界面上运行,即使把sleep去掉,好像

在只能写到80来行。其中有人解答说是ruby采用one-click install的将io和线程不能工作。这个问题保留。

posted @ 2008-03-27 20:34 kenlistian 阅读(344) | 评论 (0)编辑 收藏

http://www.intertwingly.net/stories/2002/03/16/aGentleIntroductionToSoap.html

http://www.soapware.org/bdg

标记,2篇介绍soap格式的文章。

很生动介绍soap的格式。

在采用http方式发送soap格式的xml时,

开始最简单的格式是:

<Envelope
xmlns="http://schemas.xmlsoap.org/soap/envelope/">
<Body>
<helloWorld/>
</Body>
</Envelope>

其中Envelope 是soap的标识。

这个最简单的,一般而言需要,加上对body中元素所属命名空间,如下

<Envelope
xmlns="http://schemas.xmlsoap.org/soap/envelope/">
<Body>
<helloWorld xmlns="http://www.soapware.org/">
</Body>
</Envelope>

至于为啥要上,看作者http://www.intertwingly.net/stories/2002/01/25/whatObjectDoesSoapAccess.html说明

进一步:增加SOAP描述,作者说,是约定,大伙都要这么用,而不是缺省命名空间方式处理。
<SOAP:Envelope xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP:Body>
<m:helloWorld xmlns:m="http://www.soapware.org/%22/>
</SOAP:Body>
</SOAP:Envelope>

再进一步:加一个调用方法和调用的参数

<SOAP:Envelope xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP:Body>
<m:getStateName xmlns:m="http://www.soapware.org/">
<statenum>41</statenum>
</m:getStateName>
</SOAP:Body>
</SOAP:Envelope>

再进一步:说明调用soap方法的参数类型

<SOAP:Envelope
xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SOAP:Body>
<m:getStateName xmlns:m="http://www.soapware.org/">
<statenum xsi:type="xsd:int">41</statenum>
</m:getStateName>
</SOAP:Body>
</SOAP:Envelope>

其中加入xsd:int,作者说一般情况下不见得需要(另有wsdl之类可分析参数)。这里只是加入说明格式。

posted @ 2008-03-26 23:41 kenlistian 阅读(1300) | 评论 (0)编辑 收藏

我曾经笔记过闭包和块的概念。

闭包:理解为一段代码,能作为参数传递给其它方法。
块: 相当是一个匿名函数。

感觉理解把它当做是函数体(块)或函数地址指针(闭包)就可以了。

1 myfunc= proc{ puts "myfunc call"}
2 def mycall(&block)
3    block.call(self)
4 end
5 mycall(&myfunc) 
6 ====>    #myfunc call

这个就像是传入myfunc指针地址,处理。在ruby中好像是叫做传入对象,但是传入的object_id是一致的,说明传入的还是同一个对象。

如果要把一个自定义方法作为闭包传入到另一个方法中,如下:

def mymethod()
   puts 
"mymethod"
end

def mycall(
&block)
   block.call(self)
end
 
mycall(
&mymethod)    
#报错 in `mymethod
': undefined method `call' for # nil:NilClass (NoMethodError)
mycall(){ mymethod }  #通过
 上式中,如果把mymethod方法放在{}中,才能形成块包,则才能通过调用。

 当然,mycall方法参数中必须带有允许带有你在后面加{}做块传递。

当在mycall查看块属性时,

def mycall(&block)
  puts block.class
  block.call(self)
end
不管你传入的是mymethod ,还是myfunc,则都显示为proc类型,

在上式中,当定义方法可传入闭包,则其调用是眼花缭乱的。


 1 myblock = proc{ |i|
 2                 puts "call block..,#{i}"
 3          }
 4 
 5 def mymethod()
 6   puts "call mymethod"
 7 end
 8 
 9 def myfunc(&func)
10    func.call(self)
11 end
12 
13 def myfunc2(&func)
14   func.call("myfunc2 call " ) 
15 end
16 
17 myfunc(&myblock)
18 myfunc(){ mymethod }
19 myfunc(){ myfunc2(&myblock)}
20 myfunc(){(1..10).each(&myblock)}
21 myfunc(){
22     (1..10).each(){
23           myfunc2(&myblock)
24       } 
25     }
26 



posted @ 2008-03-26 16:37 kenlistian 阅读(199) | 评论 (1)编辑 收藏

仅列出标题
共42页: First 33 34 35 36 37 38 39 40 41 Last