秋天到了,坐在自己摩托上感觉到阵阵的凉意。
前段时间我从Web 组调往了 Win32 组,从事了一个企业软件的设计与开发的工作。现在已经正式提交客户运行了。运行状况还不错,借我朋友的一句话“没有什么消息,那本身就是一个好消息!”
就在这次开发中的问题,我做了一下总结:
1. 关于数据类型
在开发初期,我们在设计数据结构时,有一些数据使用了 float 与 double 数据类型,用来记录一些数值。刚开始还好,但到了测试阶段就出现了一些问题。当数据层提交了一个 66.6 到数据库,然后取出数据就变为 66.600000001 。 浮点数的近拟性就突示出来了,其实如果只是显示那还问题不大,但把这些数一进行运算那笑话可就大了。大家也许也能体会到在项目中期修改数据结构的痛苦:(。
但有一点还是不明白,同一张表中,同一个字段 有时 66.6 就能正确显示,而有时就只能显示为 66.60000001
所以大家在设计数据结构时,如果要进行运算的数据最好使用 decimal类型。只要预设好精度,那会非常好用。
2. Self -Update Application
应用开发完成后,更新也是非常的重要的。如果你的程序有一个 AutoUpdate 功能那是很酷的。
我们的项目主要实现方法是:
a. 使用 IIS 站点做为 服务器端。(当然了你也可以使用 FTP 等)
b. 使用一个 AppVersion.xml 文件来保存最新的程序信息(主要信息为 当前版本,文件列表,文件大小,以及文件完整性验证码)。(当然使用 Web Service 会更加安全)
<?xml version="1.0" encoding="utf-8" ?>
<SBS>
<Ver>1688</Ver>
<Files >
<File FileName="File1" size="1212121" key="8a7c5e5a6c4d2e3f2a3" ></File>
<File FileName="File2" size="1212121" key="8a7c5e5a6c4d2e3f2a3" ></File>
</Files>
</SBS>
c. AppMain.exe 是我们程序的主要启动程序,它的主要任务是确定比较服务器端与客户端之间的版本差异,如果一致就启动应用程序。如果有新的版本出现就就下载并验证新版本文件。并启动新的版本。(AppMain.exe 要控制一下,只能让系统中有一个实例存在,不然可能会出现IO问题)
d. 应用程序中也要添加一个查询模块,对给定的服务器定时验证版本,最好用一个独立的进程进行,性能会好一点。如果有新的版本了,那就启动AppMain.exe 程序,并退出主程序。(我们的程序有这个必要,大部分应用不会要求怎么高的。)
e. 这样一个基本的自动更新程序就完成了。这个思想比较简单。如果你对自动更新感性趣,MS有一个 Microsoft.ApplicationBlocks.ApplicationUpdater ,你可以参考一下。
还有一些其它的,下次写吧!
今天看到mmkk 的回复,就试着安装了一下 这个 AspForum 2.0 .
第一步:
安装数据库:
在自己的Sql Server 里创建一个库: AspForumDB
Create Database AspForumDB
然后运行几个 .Sql 脚本文件.(请注意顺序)
文件都在: (forums_latest_source\ASP.NET Forums\Data Providers\SqlDataProvider\sql) 中
- 2003.10-Tables.sql
- 2003.10-Functions.sql
- 2003.10-Procedures.sql
- 2003.10-Data.sql
- 2003.10.Alpha.sql
- forums_alpha_to_beta.sql
第二步
创建 Forum 2.0 工程(你的机器上一定要IIS, VS 2003)
- 把 forums_latest_source\ASP.NET Forums\Web 目录全部copy 到 你的web 目录 (一般为C:\Inetpub\wwwroot) 的 Forums 目录中.
- 打开你的IIS 管理器,为这个Forums 目录创建一个虚拟目录
- 找到 \forums_latest_source\ASP.NET Forums 目录中的 ASP.NET Forums.sln 文件,双击, 应该没什么问题就可以打开了
- 由于编码的问题. 工程一开始是不能编译的. 有一个地方要改一下.
- orums_latest_source\ASP.NET Forums\Controls\Navigation\JumpDropDownList.cs 中的69,75,81 行的“?”号,改为 “引号” , 这样就可以正常编译了
第三步
修改Web.config 文件
- 因为我们使用的是Sql Server 数据库,只要把providers>SqlForumsProvider > ^SqlConnectionString^ 字段修改一下.也就是你的数据库连接字符串 (如
ata source=192.168.0.1;user id=sa;password=password;initial catalog=ASPForumDB;Connect Timeout=30)
- 修改compilation 中的 debug 为 true ,后面我们要调试工程
- 到这里,已经可以运行了. 把 Defualt.aspx 设为启动文件, 按下F5 , 应该看到界面了.
第四步
处理一些BUG
- 运行后我们发现,注册用户很正常, 但注册的用户就是登录不上. 为什么呢?可能是作者发布的比较急有些地方没有处理好.
- 找到 forums_latest_source\ASP.NET Forums\Components \users.cs 文件的843 行
user.Password = Encrypt(Globals.GetSiteSettings().PasswordFormat, password, user.Salt); 修改为
user.Password = Encrypt(Globals.GetSiteSettings().PasswordFormat, password, "") ;
- 然后重新编译系统.
- 重新注册一个用户, 试一下登录,应该可以了
第五步
添加管理员
- 打开你的SQL 查询分析器, 连接 AspForumDB 数据库, 运行"elect UserId from Forums_Users where UserName='管理员帐号'" 得到一个UserId 号
- 然后运行 "exec forums_Roles_AddUser UserId ,1"
因为只是安装了一下,功能基本上都可以使用了. 有什么问题以后再补充吧.
今天收到了 Forum 2.0 Latest Source Code ,不知道是不是最终版本了. 是 2004 年3月19 日打包的.
记得 Forum 1.0 beta 1 发布的时候我还在学校, 可以说Asp.net Forum 是我学习 ASP.Net 的启蒙教程. 甚至自己还学着他的代码,写了一个小Forum. 这个版本的ASP.Net Forum 2.0 的代码我还没有看,但我想一定会有所收获的。
因为我的项目在紧张的进行中,所以也就很少有精力来写技术文章。
Forum 2.0 latest source Code DownLoad ! 3915KB
/// <summary>
/// 数据流转换为十六进制字符串
/// </summary>
/// <param name="bytes"></param>
/// <returns></returns>
private static string ByteArrayToHexString(byte[] bytes)
{
if ( bytes == null || bytes.Length == 0 )
throw new ArgumentException( "bytes [] 参数出错" );
StringBuilder hexString = new StringBuilder( 2 * bytes.Length );
for ( int i = 0; i < bytes.Length; i++ )
hexString.AppendFormat( "{0:X2}", bytes[i] );
return hexString.ToString();
}
/// <summary>
/// 十六进制字符串转换为数据流
/// </summary>
/// <param name="strHexString"></param>
/// <returns></returns>
private static byte[] HexStringToByteArray(string strHexString)
{
int len = strHexString.Length ;
if ( (len % 2) !=0)
throw new Exception("HexString 字符出错!!");
int byteLen = len /2 ;
byte[] bytes = new byte [byteLen];
for (int i=0;i<byteLen ;i++ )
{
bytes[i] = Convert.ToByte( strHexString.Substring( i*2,2),16);
}
return bytes;
}
可以在加密数据时使用。
在 Util 里有实现
PDC 已经结束了,甚至MSDN用户都收到 PDC 2003 的DVD资料盘了。但对于我们这样非MSDN订阅者怎么办呢?Microsfot 还是很照顾我们的,给了以下两个地址:
http://www.asp.net/whidbey/pdc.aspx?tabindex=0&;tabid=1
http://msdn.microsoft.com/events/pdc/agendaandsessions/sessions/default.aspx
当然了,你想下载所有的文件,也不是没有办法,在 Download all the PDC materials... (多谢小气的神) 就有,但上面公布的代码还有一些小问题,我对代码进行了一点点修改。已经可以编译了,如果你不放心,我也提供了修改后的代码,自己手动编译一下就OK了。真希望那位雷锋同志能共享一下它的 PDC.ISO
,当了雷锋可一定要发邮件给我
很多域名注册服务商都有一个很COOL的服务,就是搜索某个域名得到它的详细注册信息。其实我们也能做到这一点。以下是一些重要性步骤:
1.得到你的Whois 服务器的地址:
Dns.Resolve(cc + ".whois-servers.net").AddressList[0] //cc 为一级域名。如 COM,NET,ORG等
2.连接Whois 服务器的 43 端口:
s.Connect(new IPEndPoint(Dns.Resolve(cc + ".whois-servers.net").AddressList[0], 43));
3.最后发送你要查询的域名,以及回车结束:
s.Send(Encoding.ASCII.GetBytes(domain + "\r\n"));
4.你就能收到域名的详细信息了。
你也可以使用telnet 来实现。如我要查询 www.163.com 的注册信息。
telnet com.whois-servers.net 43[enter]
163.com[enter]
FxCop 1.23
FxCop is a code analysis tool that checks .NET managed code assemblies for conformance to the Microsoft .NET Framework Design Guidelines. It uses reflection, MSIL parsing, and callgraph analysis to inspect assemblies for more than 200 defects in the following areas: naming conventions, library design, localization, security, and performance . FxCop includes both GUI and command line versions of the tool, as well as an SDK to create your own rules.
Reflector for .NET
Reflector is a class browser, decompiler and XML documentation browser for .NET components (assemblies). It features assembly and namespace views, type and member search, reference search, IL disassembler, C# decompiler, VB decompiler, C# XML documentation viewer, MSDN help viewer, dependency trees, supertype/subtype hierarchies and resource viewers. Function prototypes are displayed in C# and VB syntax.
很多开发者都想要一个非常强大的程序日志管理库,能够了解用户对应用程序的使用情况。当程序出现问题时,可以通过分析日志来了解问题之所在。
过去我们总是用一种很简单的方式来处理日志,即:使用一个日志文件,当程序有问题时就要求用户提供这个文件。但常常日志文件不是没有,就是已经被删除。
Log4net 是著名的 log4j for Java 项目的一部分。它是由 www.neoworks.com 的一个团队开发出来,支持多种方式的日志。如 ADO (MS Sql Server 等),File (文件), Console (控制台),EventLog (系统日志),SMTP(邮件方式)...
而且支持所有的.Net 平台:
- Microsoft .Net Framework 1.0 (1.0.3705)
- Microsoft .Net Framework 1.1 (1.1.4322)
- Microsoft .Net Compact Framework 1.0 (1.0.5000)
- Mono 0.25 or higher (Linux 下的)
- Microsoft Shared Source CLI 1.0 (就是MS 开发源代码的 .Net 运行库)
如果你要了解更详细的信息:
log4net Site (好象下载有点问题,怎么也下载不了。也有可能是我这边网络的问题)
Using log4Net (一篇很专业的使用指南,花了不少时间才找到的)
log4net.dll (我找到的编译好的 log4net.dll 文件,可以直接加入你的工程。)