HappyCode

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

2008年3月26日 #

需要baiduHI邀请的留下百度空间帐号
posted @ 2008-03-26 20:12 HappyCode 阅读(419) | 评论 (64)编辑

2007年4月19日 #

在一些应用系统中,经常要用到一些需要在后台自动执行的服务,基于这个,我设计了一个通用的window服务框架。包含三部分
1、服务程序:服务的启动,停止,业务插件库的加载。
2、调度监控:独立的线程,对其他业务插件库定时检测状态,对需要有定时任务的插件触发事件。
3、更新服务:自动从服务器升级和更新新的插件库,实现自动加载插件,自动可以关闭正在运行的对应插件,然后再加载,再启动。所有的插件都可以自动发现。

通过插件式服务可以随意增加新的任务,彼此之间独立。
实现过程:
(1)设计插件接口

插件接口

Initialize()函数相当于构造函数,做插件初始化
DoTask()执行对应的业务功能,建议在这个接口实现类中启动一个业务线程,不要在这里执行业务功能。
Dispose()插件卸载时执行清理
(2)主服务程序
主服务程序很简单,.net可以基本实现,在主程序中建立一个插件服务类(PluginServices)
插件服务类

 

这个类实现了插件库的加载和运行
在服务程序中建立。
下一篇写一个插件库

posted @ 2007-04-19 19:31 HappyCode 阅读(149) | 评论 (0)编辑

2007年2月2日 #

     摘要:   阅读全文
posted @ 2007-02-02 22:23 HappyCode 阅读(729) | 评论 (0)编辑

 今天看到一篇 软件公司绩效考核 文章 ,公司正想用,不知道到底好不好,大家谈谈想法
软件开发工程师工作质量考核评分标准
序号        标准        说明        评分标准       
1        错误率 
               每千行程序20个错误以下(包含20个)        5       
                每千行程序21-25个错误        4       
                每千行程序26-30个错误        3       
                每千行程序31-35个错误        2       
                每千行程序36个错误以上(包含36个)        1
       
2        新技术使用情况 
               大量使用新技术,
                并且解决了传统技术无法解决的问题;        5        
                大量使用新技术,解决了传统技术难以解决的问题,
                大大提高了工作效率;        4       
                使用部分新技术,替代了部分传统技术,
               一定程度上提高了工作效率;        3       
                使用了少量的新技术,替代了了少量的传统技术;        2       
                没有使用任何新技术,仍然用传统技术解决问题;        1   
   
3        程序编码的规范性
                 编码非常规范,无可挑剔,
                同时又对公司制度规范提出了改进意见;        5       
                编码非常规范,无可挑剔;        4       
                编码规范,不符合规范之处很少;        3       
                编码基本规范,但不影响对程序的理解;        2       
                编码存在较大的不规范性,
                并且对程序理解造成了比较严重理解误差;        1
       
4        文档编写的规范性       
              文档书写按照公司的相关模板,
               规范、美观,无可挑剔;        5                     
              文档书写按照公司的相关模板,规范,
               但美观性上有待改进;        4       
                文档书写基本规范,但美观性上有待改进;        3       
                文档书写的规范性、美观性上都有待改进;        2       
                文档书写的规范性、美观性上都存在很大的改进空间;        1 
     
5        及时性
                能够在预定时间的80%内完成;        5       
                能够在预定时间的90%内完成;        4       
                能够在预定的时间内完成;        3       
                超过预定时间的10%才完成计划;        2       
                超过预定时间的20%才完成计划;        1
       
6        编码注释的完整性
               编码注解完整、清楚、容易被人理解,
                不会造成理解方面的偏差;        5       
                编码注解完整、清楚、比较容易被人理解,
               但会引起少量的理解偏差;        4       
                编码注解完整,比较清楚,但会引起部分理解的偏差;        3       
                编码注解比较完整,但有部分代码没有注解;        2       
                编码注释不完整,大量的编码没有注释,让人难以理解;        1
posted @ 2007-02-02 21:15 HappyCode 阅读(1502) | 评论 (5)编辑

2007年2月1日 #

这段时间开始研究WCF,发现了一个容易入门的学习教程,来自 Robert Shelton, Jr.Windows Communication Foundation (Workshop) ,于是便学边做,顺便也翻译部分内容,基本是按照意思翻译的。在这之前请按装好相应的软件
   
开始正题,希望对大家有所帮助。
 
第一步:选择项目类型和模版
  
打开vs2005,选择网站,然后选择项目模版,选择“WCF Service”


   

确定后系统自动建好了一个基本的框架

第二步:在我们的服务中建立新的代码文件
      
当解决方案建立好后,你可以看到在App_Code/Services.cs 文件,这是一个例子文件,你可以用这个建立你的特性服务,我们决定自己建立一个
自己的服务文件。因此我们选择在App_Code文件夹中增加一个新文件 BankService.cs  
 

 

第三步:增加必须的名字空间

 打开BankService.cs,在顶部加入

   using System.ServiceModel;

using System.Runtime.Serialization;

 

第四步:建立服务合约(Create the Contract for our Service

先把程序贴出来在解释一下

using System;

using System.Data;

using System.Configuration;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

using System.ServiceModel;

using System.Runtime.Serialization;

 

 

namespace BankServices

{

 

    [ServiceContract]  //申明这个类为服务公约

    public interface IAccountActivities

    {

        [OperationContract] //申明公约操作方法

        // Method to retrieve the Account Balance

        decimal getBalance(string AccountNumber);

 

        [OperationContract]

        //  Method to Debit (withdraw) money from the account

        decimal debitAccount(string AccountNumber, decimal Amount);

 

        [OperationContract]

        //  Method to Credit (deposit) money into the account

        decimal creditAccount(string AccountNumber, decimal Amount);

    }

 //上面这个类就是一个接口类,完成和其他(比如客户端)程序的通信

//下面这个类是对这个接口的实现,这个不用多说了

    public class AccountActivities : IAccountActivities

    {

        private decimal _currentBalance;  // Holds the balance for the account

 

        #region IAccountActivities Members

 

        public decimal getBalance(string AccountNumber)

        {

            return _currentBalance;

        }

 

        public decimal debitAccount(string AccountNumber, decimal Amount)

        {

            _currentBalance = _currentBalance - Amount;

            return _currentBalance;

        }

 

        public decimal creditAccount(string AccountNumber, decimal Amount)

        {

            _currentBalance = _currentBalance + Amount;

            return _currentBalance;

        }

 

        #endregion

    }

}

第五步:修改Service.svc文件

把代码给为如下内容:

<% @ServiceHost Language=C# Debug="true" Service="BankServices.AccountActivities" CodeBehind="~/App_Code/BankServices.cs" %>

第六步: 建立服务通信端(Create the Service End Points

   我们可以借助WCF服务配置软件完成这个,在vs2005的工具中可以找到


 
File,选择打开,找到WCFservices\web.config,在你建的wcf服务程序目录下。


 
Configuration导航条下,选择MyService,然后在Name属性力改为BankServices.AccountActivities;


然后再选择


修改为

 

Adviced下找到 Service behaviors节点

returnFaultsname 改为 BankServicesBehavior

 

现在 我们使 Service Metadata 有效


选择增加,打开对话框后,选择ServiceMetadata 然后按下
Add   按钮。


选择serviceMetadata 属性,设置
HttpGetEnabled 属性为true.这个将允许我们的客户端通过http协议发现我们的服务

然后保存我们的设置。完毕。最终的结果看起来如下:

 

第七步:测试我们的服务

 编译并生成程序,然后选择运行,出现文件列表选项,选择service.svc,然后会出现如下界面

 

 

第八步:发布站点

 在菜单中选择发布站点,输入:http://localhost/services/bankaccountservices

选择OK,发布成功后在iis中就会看到。

服务这一步完成,下面我们开始客户端的开发

  第一步:建立一个Form程序,完成后选择服务引用。

 

 

 

出现如下对话框,输入:http://localhost/services/bankaccountservices/service.svc

引用名字改为 ATMServices。选择增加


Form1.cs中定义:,写一个调用函数

private ATMServices.AccountActivitiesClient myService = new ATMClient.ATMServices.AccountActivitiesClient();

decimal returnedBalance = 0;

decimal TransactionAmount = 123;

 

returnedBalance = myService.creditAccount("123", TransactionAmount);

returnedBalance就是通过调用服务接口计算出来的值。

 

posted @ 2007-02-01 08:49 HappyCode 阅读(1765) | 评论 (2)编辑