惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

月光博客
月光博客
T
Tenable Blog
D
DataBreaches.Net
GbyAI
GbyAI
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
腾讯CDC
V
Visual Studio Blog
B
Blog
雷峰网
雷峰网
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
I
InfoQ
M
MIT News - Artificial intelligence
有赞技术团队
有赞技术团队
T
Tailwind CSS Blog
The Cloudflare Blog
L
LangChain Blog
MongoDB | Blog
MongoDB | Blog
Vercel News
Vercel News
Cloudbric
Cloudbric
L
Lohrmann on Cybersecurity
博客园 - 司徒正美
T
The Exploit Database - CXSecurity.com
Google DeepMind News
Google DeepMind News
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Attack and Defense Labs
Attack and Defense Labs
Martin Fowler
Martin Fowler
SecWiki News
SecWiki News
T
Threat Research - Cisco Blogs
J
Java Code Geeks
Cyberwarzone
Cyberwarzone
Forbes - Security
Forbes - Security
Spread Privacy
Spread Privacy
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
大猫的无限游戏
大猫的无限游戏
O
OpenAI News
D
Darknet – Hacking Tools, Hacker News & Cyber Security
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Schneier on Security
Schneier on Security
S
Security @ Cisco Blogs
酷 壳 – CoolShell
酷 壳 – CoolShell
The Hacker News
The Hacker News
H
Help Net Security
Y
Y Combinator Blog
C
Cybersecurity and Infrastructure Security Agency CISA
T
Tor Project blog
量子位
U
Unit 42
S
SegmentFault 最新的问题
V
V2EX
D
Docker

博客园 - 成为-行动-拥有(BeDoHave)

我的MIS快速开发框架集成参考 选择一个框架的权衡建议 简单为美的IT开发尝试 请跟我来(完)--使用Ext及其llano的注意事项 请跟我来--使用Ext+llano快速搞定CRUD 请跟我来--Ext数据应用开发的几板斧 请跟我来--使用Ext搞个原型 请跟我来(EXT2.0+llano实践) 2007年的最后的几笔 用NBear和QPG分布式框架改善生活 - 成为-行动-拥有(BeDoHave) - 博客园 风继续吹----对一些ORM框架的使用心得(2) 冷眼程序人生----对一些ORM框架的使用心得 欢迎新成员加入! QPG分布框架1.1.1 需求看板单机版可以使用了 QPG加速器的使用 QPG分布框架V1.1 BETA2说明 实践篇(4)—需求看板解析 实践篇(3)--关于事务处理的一点细节
是"渔"非"鱼"--QPG分布处理框架V1.1(Beta1)简介
成为-行动-拥有(BeDoHave) · 2005-12-29 · via 博客园 - 成为-行动-拥有(BeDoHave)

摘要:
  看到最近不少上进的朋友相继推出了功的能强大的框架,我在此不想也卖一番广告。
    QPG框架定位十分明确:
QPG框架的根本目标:
   学习简单;开发快速且有质量!
QPG框架要做--可以接入各种客户端请求的服务中介
QPG框架不做--IoC容器、AOP框架、ORM框架、各种实用工具(日期、上载、货币等)

一)思路讲解
  分布式处理框架的想法是在作者在房产中介那里受到启发而产生的:
  和本系统有关的是几个重要概念:
   消费者  ----请求服务
   服务中介----对服务请求挂牌
   服务者  ----处理自己感兴趣的服务请求

 实际就可能出现:
  一个应用既是消费者,又是服务者。
  一个服务者为多个消费者进行服务   
  多个服务者为一个消费者进行服务
   
        

二)何时使用本框架
 a) 如果你的系统UseCase小于20个,那你就没有必要用这个框架,我们假设你面对的是比较庞大的系统功能要求;
 b) 如果你的系统对可靠性要求很高但是对处理速度不太苛刻,可以考虑。
 c) 你希望学习和理解,一旦你掌握了思路,你完全可以用其他平台下的更强大的框架,也可以自己写一个框架。我们框架集成了Castle,总代码约2000行,十分简单.

二) 代码示例
a) 服务端

 1
 2namespace Demo.Facade {
 3
 4    using System;
 5    using System.Data;
 6    using QPG.Services;
 7    using QPG.Utility;
 8    using QPG.Interface;
 9    using Demo.BizRule;
10    using  Demo.DAS;
11
12    public class MyService:BaseAutoService {
13        private static Demo.BizRule.UserMgr um=new UserMgr();
14        private static Demo.DAS.TableDAO dao=new TableDAO(".","sa","");
15        public MyService(IMessageQueue mq,ILogService log):base("demo.mytest",mq,log) {
16            
17        }

18        private void Func1(DTO data,ParametersHelper h) {
19            ParametersHelper rt=new ParametersHelper();
20
21            bool exist=um.Exist(h["UserID"].ToString());
22            rt.addParameter(new Parameter("ExistResult",exist));
23            
24            if(exist) rt.addParameter(new Parameter("VerifyResult",um.Verify(h["UserID"].ToString(),h["Password"].ToString())));
25
26            data.setOutputData(rt.Items,null);
27        }

28        private void Func2(DTO data,ParametersHelper h) {
29            ParametersHelper rt=new ParametersHelper();
30
31            DataSet ds=dao.getData(h["TableName"].ToString());
32            rt.addParameter(new Parameter("Records",ds.Tables[0].Rows.Count));
33
34            data.setOutputData(rt.Items,ds);
35        }

36
37        public override QPG.Utility.DTO handle(QPG.Utility.DTO data) {
38            ParametersHelper h=new ParametersHelper(data.RequestArgs);
39            
40            string method=h["Method"].ToString();
41            if(method.Equals("GetData")) Func2(data,h);
42            else Func1(data,h);
43
44            return data;
45        
46        }

47        public override int getErrorCode(Exception ex) {
48            int rt= base.getErrorCode(ex);
49            if(rt==9999{
50                //put your code here! like ADO exception
51            }

52            return rt;
53        }

54        public override string  checkParameters(ParametersHelper ph) {
55            string  rt=string.Empty;
56            //put your code here!  like:
57
58            //            Parameter p=ph.getParameter("F(x,y)");
59            //            if(p==null) return "没有定义函数!";
60            //            p=ph.getParameter("x");
61            //            if(p==null) return "没有x!";
62            //            p=ph.getParameter("y");
63            //            if(p==null) return "没有y!";
64            return rt;
65        }

66    }

67}

68

b) 消费端

 1private void btnMath_Click(object sender, System.EventArgs e) {
 2            DTO d=new DTO();
 3            Parameter[] ps=new Parameter[]{new Parameter("F(x,y)",txtF.Text),
 4                                              new Parameter("x",int.Parse(tX.Text)),
 5                                              new Parameter("y",int.Parse(tY.Text)),
 6            }
;
 7            d.setInputData(ps,null);
 8                        DTO rt=container.handle("demo.math",d);
 9            if(rt==null) txtMsg.Text="Time out!";
10            else {
11                ParametersHelper ph=new ParametersHelper(rt.ResponseArgs);
12                txtMsg.Text=ph.ToString();
13            }

14        }

三) 配置讲解和示例下载
a) 下载示例源代码
b) 运行MQ-bin

c) 运行Demo.BasicHost
d) 运行DemoUI,试试基本的概念,如果要获取数据表,请确保账号sa密码空,否则要修改一下

    以上演示一个远程计算,如果要本地计算则在配置文件里去掉注释:

<?xml version="1.0" encoding="utf-8" ?> 

<configuration> 
  
<components>
<!--
    <component id="demo.math" 
               type="QPG.Services.MathService, QPG.Common">
    </component>
-->
  
</components>
</configuration>


  以上演示一个远程计算报错。


 以上演示一个远程获取数据。


 以上演示使用Socket执行认证。你可以看到协议的XML:

e) 运行Demo.BankHost看看高级演示

alex 2005-12-29