• 远程对象访问Socket篇


    一、摘要

           在上篇我们已经讲了远程访问对象,现在我们来看看他的内部是怎么实现的,本次远程对象访问用Socket实现。

    二、本文大纲

           a、摘要。

           b、本文大纲。

           c、回顾。

           d、Socket设计。

           e、其他。

    三、回顾

    1:在上篇LiteORM学习六:远程对象中我们说到在实体类上加入DataEntity就可以在网络中访问了,那具体是有什么技术呢,有那几种实现方式.WebSerivce,wcf,socket,Remoting

    2:在上篇LiteORM学习六:远程对象中我们只说到了如何使用远程对象。

    四、Socket设计

       在OHA中使用了SOCKET技术进行远程访问业务对象的方法。

    1:在上篇中我们说到在实体类上加入DataEntity就可以在网络中访问了,在客户端和服务器端都有一个SocketPortal 这里面包含了远程访问的方法和属性。

    2:  在OHA中也和Csla一样使用固定方法和扩展方法,两种方式实现 如图

    image

    使用了固定的几个事件,他们分别是 DataPortal_Create DataPortal_Fetch DataPortal_Insert  DataPortal_Update DataPortal_Delete 我们还提供了

    image 扩展接口,使用者可以实现这个接口就可以自定义事件。

    3:Socket设计图

    image

    大家看到了在客户端和服务器端都有一个Socket数据门户,这个主要使用Socket来作为远程对象的访问。

    在服务器端:直接启动Socket数据门户就是可以了,默认情况下使用本机做为服务器,目前还没有实现指定IP来作为服务器

    image

    Socket主要做两件事情,一个负责连接管理,一个是负责业务处理。

    image

    server_OnAcceptClient 事件负责连接管理

    server_OnReceiveData 事件负责业务处理

    五、其他

       在OHA中使用了SOCKET技术进行远程访问业务对象的方法。

      1:加入日志。

      2:分布式部署,多服务器部署方案。

      3:可以随意指定一台电脑作为服务器。

      4:使用者可以自己扩展。

      5:加强设计模式学习,这个是对我自己说的。需要深入系统的学习Socket以完善这个设计。

      6:希望高手们多提提意见哦。

    作者:罗敏贵
    邮箱:minguiluo@gmail.com
    QQ群:34178394 建群 主要是寻找志同道合的人士一起学习和讨论自己的所学所思
    出处:http://luomingui.cnblogs.com/
    说明:专注于微软平台项目架构、熟悉设计模式、架构设计、敏捷个人和项目管理。现主要从事WinForm、ASP.NET、等方面的项目开发、架构、管理工作。文章为作者平时里的思考和练习,可能有不当之处,请博客园的园友们多提宝贵意见。
    知识共享许可协议本作品采用知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议进行许可。

    C#基础系列

    asp.net web控件使用和基础 C#基础 和win控件使用
    摘要: 据说明天样片就寄来了,可是我的pc端串口还未做,以为很难,就拖着,看了http://www.cnblogs.com/tuyile006/archive/2008/10/06/514300.html之后更是一头雾水今天下狠心,没想到不到两小时就解决了,做个教程方便大家。使用serialport类,C#自带的第一个例子参见http://book.csdn.net/bookfiles/499/10049917236.shtml首先是在一台pc同一个串口上实现数据收发。那么需要把TX和RX短接。我等软件专业的哪有什么做跳线的母头、导线啊,我就在程序运行时拿钥匙把那两个脚短接了。public parti阅读全文
    posted @ 2011-10-24 08:44 罗敏贵 阅读(144) | 评论 (0) 编辑
     
    摘要: C# 创建快捷方式 以下代码在2.0,3.0,3.5 下都可以正常运行,在4.0在报错。不知道那为仁兄知道在4.0下创建快捷方式。选择 COM 选项卡并选择 Windows Script Host Object ModelusingIWshRuntimeLibrary;namespaceConsoleApplication1{classProgram{staticvoidMain(string[]args){stringDesktopPath=System.Environment.GetFolderPath(System.Environment.SpecialFolder.Desktop);/阅读全文
    posted @ 2011-09-23 11:02 罗敏贵 阅读(49) | 评论 (0) 编辑
     
    摘要: jQuery.get(url,[data],[callback]) 通过远程 HTTP GET 请求载入信息。 这是一个简单的 GET 请求功能以取代复杂 $.ajax 。请求成功时可调用回调函数。如果需要在出错时执行函数,请使用 $.ajax。 Load a remote page using an HTTP GET request. This is an easy way to send a simple GET request to a server without having to use the more complex $.ajax function. It a...阅读全文
    posted @ 2011-08-30 16:54 罗敏贵 阅读(309) | 评论 (0) 编辑
     
    摘要: 摘要: 1.绑定数据this.lngCatalogID.DataSource=dt;//\绑到DataTable上this.lngCatalogID.DataTextField="strCatalogName";//前台看到的值,也就是CheckBoxList中显示出来的值this.lngCatalogID.DataValueField="lngCatalogID";//这个值直接在页面上是看不到的,但在源代码中可以看到this.lngCatalogID.DataBind();2.获取钩选的项foreach(ListItemliinlngCatalogID.It阅读全文
    posted @ 2011-08-04 16:00 罗敏贵 阅读(81) | 评论 (0) 编辑
     
    摘要: 自从Vs2005起,Vs开发环境便自带了WebDev.WebServer,就是这个图标,它实际上是一个小型的Web服务器,专用于.net平台。大家经常调试程序它还是相当的方便,经过小小的配置就可以指向某个文件夹,使该文件夹成为网站目录已供访问。 WebDev.WebServer确实很轻便,同时它本身是.net程序,才2个文件,作为测试和演示环境是非常的好用,在xp也能很好的运行,Xp的IIS5实在是不方便用。 但是自带的WebDev.WebServer只能用于本机,那是因为MS对其进行了限制,因为作出它的目的,本身是为了Vs的开发更方便而已,但是很多测试也是基于网络的,至少你不希望别人测试一些网站,总得来用你的电脑吧。 WebDev.WebServer一共是两个文件,一个是WebDev.WebServer.exe,另一个是WebDev.WebHost.dl阅读全文
    posted @ 2011-07-12 17:23 罗敏贵 阅读(314) | 评论 (0) 编辑
     
    摘要: Remoting服务发布方式? 通过配置文件实现用应用程序发布 这个在第一篇就已经讲了。通过Windows服务发布。 通过IIS发布阅读全文
    posted @ 2011-07-11 13:52 罗敏贵 阅读(82) | 评论 (0) 编辑
     
    摘要: 对于服务器对象不保留任何状态的SingleCall对象是不需要有对象租用的。只有需要保留状态的对象,无论是服务器激活的Singleton 还是客户端激活的对象才需要对象租用。 租约 生命周期 发起人(Sponsor) 下面是NET Remoting 为管理远程对象的生存期管理的架构: ILease 接口定义了很多用于管理对象生存期的属性: InitialLeaseTime。确定租用最初的有效期。 RenewOnCallTime。在每个方法调用后,更新此时间单元的租用。 SponsorshipTimeout。负责人通知租用过期后,Remoting 要等待的时间。 CurrentLeaseTime。距租用到期的时间(只读)。 续约的方法有3种: 1)隐式续约:当客户调用远程对象上的方法时,租约的隐式续借会自动进行。 2)显示续约:通过ILease接口的Renew()方法完阅读全文
    posted @ 2011-07-09 14:53 罗敏贵 阅读(94) | 评论 (1) 编辑
     
    摘要: 什么是Remoting,简而言之,我们可以将其看作是一种分布式处理方式 。从微软的产品角度来看,可以说Remoting就是DCOM的一种升级,它改善了很多功能,并极好的融合到.Net平台下。Microsoft .NET Remoting 提供了一种允许对象通过应用程序域与另一对象进行交互的框架。这也正是我们使用Remoting的原因。为什么呢?在Windows操作系统中,是将应用程序分离为单独的进程。这个进程形成了应用程序代码和数据周围的一道边界。如果不采用进程间通信(RPC)机制,则在一个进程中执行的代码就不能访问另一进程。这是一种操作系统对应用程序的保护机制。然而在某些情况下,我们需要跨过应用程序域,与另外的应用程序域进行通信,即穿越边界。阅读全文
    posted @ 2011-07-08 16:14 罗敏贵 阅读(181) | 评论 (1) 编辑
     
    摘要: 什么是Remoting,简而言之,我们可以将其看作是一种分布式处理方式 。从微软的产品角度来看,可以说Remoting就是DCOM的一种升级,它改善了很多功能,并极好的融合到.Net平台下。Microsoft .NET Remoting 提供了一种允许对象通过应用程序域与另一对象进行交互的框架。这也正是我们使用Remoting的原因。为什么呢?在Windows操作系统中,是将应用程序分离为单独的进程。这个进程形成了应用程序代码和数据周围的一道边界。如果不采用进程间通信(RPC)机制,则在一个进程中执行的代码就不能访问另一进程。这是一种操作系统对应用程序的保护机制。然而在某些情况下,我们需要跨过应用程序域,与另外的应用程序域进行通信,即穿越边界。阅读全文
    posted @ 2011-07-08 13:39 罗敏贵 阅读(110) | 评论 (0) 编辑
     
    摘要: 摘要: 网上有不少用其他语言实现虚拟桌面的例子,但是用C#实现的倒是比较少,所以就封装了一个VirtualDesktop类,可以很方便的实现虚拟桌面。 实现虚拟桌面,主要是利用CreateDesktop、OpenDesktop和 SwitchDesktop这几个API函数,如果想在打开的桌面上运行程序的话还需要的就是CreateProcess函数,这些API函数的具体介绍可以到MSDN上查看,在程序中,这些API的封装都放在NativeMethods类中。 VirtualDesktop类都已经把重要的方法实现了,包括创建新和打开新桌面、切换到新桌面、关闭新桌面和在新桌面中运行程序,而且还提供了几个常用阅读全文
    posted @ 2011-06-27 16:49 罗敏贵 阅读(235) | 评论 (1) 编辑
     
    摘要: 引用KProtectProcess.dll然后NKCore.dll 是c++的类库放在同级目录就可以了。开始调用KProtectProcess.KProcess.SelfProtection();结束调用KProtectProcess.KProcess.UnLoadProtection();这样用户就无法在任务管理器的 进程 中杀掉你的程序了。/Files/luomingui/进程防杀.rar阅读全文
    posted @ 2011-06-25 12:43 罗敏贵 阅读(131) | 评论 (1) 编辑
     
    摘要: using System;using System.Collections.Generic;using System.Text;using System.Collections;namespace AppUtility{ ////// 获得汉字的拼音 ///static public class PinyinHelper { static private Hashtable _pinyinHash; #region static stor. static PinyinHelper() { _pinyinHash = new阅读全文
    posted @ 2011-06-23 13:35 罗敏贵 阅读(53) | 评论 (0) 编辑
     
    摘要: 测试的url地址是http://www.gkxsn.com/testweb/default.aspx?id=1, 结果如下:Request.ApplicationPath: /testwebRequest.CurrentExecutionFilePath: /testweb/default.aspxRequest.FilePath: /testweb/default.aspxRequest.Path: /testweb/default.aspxRequest.PathInfo:Request.PhysicalApplicationPath: E:\WWW\testweb\Request.Ph.阅读全文
    posted @ 2011-06-16 11:48 罗敏贵 阅读(23) | 评论 (0) 编辑
     
    摘要: 转载笔记:DropDownList无限级分类(灵活控制显示形式) 调用方式:AddTree("0", this.RadTreeView2.Nodes);二次改造做成一个通用的类 调用 如: new DrpGradingList("select * from dbo.NT_Clcs_ClientType ", "Cc_Name", "Cc_ID", defValue).BindDrpClass(ddl); 改造过的函数 BindDrpClass(editparentid);}阅读全文
    posted @ 2011-06-07 12:51 罗敏贵 阅读(69) | 评论 (0) 编辑
     
    摘要: 1>今天一个朋友提出一个问题: 为什么在用File控件读取图片、文档、等文件路径的时候没错误,而在读取视频文件(如rmvb等)出现该页无法显示错误。其代码片段如下:privatevoidbtnUpFiles_Click(objectsender,System.EventArgse){stringpathName=this.File1.PostedFile.FileName.ToString();Response.Write(pathName);}2> 着手解决问题: 我以为是取路径字符串的问题,所以就先截取路径和文件名,再截取文件的后缀名,分别保存为字符串,但是始终有错。其代码片段阅读全文
    posted @ 2011-06-07 10:06 罗敏贵 阅读(261) | 评论 (0) 编辑
     
    摘要: 什么是进程?当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源。而一个进程又是由多个线程所组成的。什么是线程?线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针、程序计数器等),但代码区是共享的,即不同的线程可以执行同样的函数。什么是多线程? 多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任 务,也就是说允许单个程序创建多个并行执行的线程来完成各自的任务。多线程的好处: 可以提高CPU的利用率。在多线程程序中,一个线程必须等待的时候,CPU可以运行其它的线程而不 是等待,这样就大大提高了程序的效率。多线程的阅读全文
    posted @ 2011-05-12 15:07 罗敏贵 阅读(79) | 评论 (0) 编辑
     
    摘要: 引言委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易。它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去的人每次见到委托和事件就觉得心里别(biè)得慌,混身不自在。本文中,我将通过两个范例由浅入深地讲述什么是委托、为什么要使用委托、事件的由来、.Net Framework中的委托和事件、委托和事件对Observer设计模式的意义,对它们的中间代码也做了讨论。将方法作为方法的参数我们先不管这个标题如何的绕口,也不管委托究竟是个什么东西,来看下面这两个最简单的方法,它们不过是在屏幕上输出一句问阅读全文
    posted @ 2011-05-03 19:02 罗敏贵 阅读(35) | 评论 (0) 编辑
     
    摘要: 引言在 Part.1 Http请求处理流程 一文中,我们了解了Http请求的处理过程以及其它一些运作原理。我们知道Http管道中有两个可用接口,一个是IHttpHandler,一个是IHttpModule,但在Part.1中,我并没有详细讲述如何对它们进行编程,只是轻描淡写地一笔带过。所谓学以致用,前面已经介绍了不少概念和原理。在本文中,我们通过几个范例来了解 IHttpHandler,看看掌握这些原理的实际用途。IHttpHandler 概述可能和我一样,很多Asp.Net开发人员都有过Asp的背景,以至于我们在开发程序的时候,通常都是在“页面级”上思考,也就是说我们现在正在做的这个页面应该阅读全文
    posted @ 2011-05-03 18:52 罗敏贵 阅读(32) | 评论 (0) 编辑
     
    摘要: Silverlight入门 那么,你如何开始使用Silverlight?第一,花一些时间去找一些讲解 Silverlight 的网站。这些网站包含很多 Silverlight 教程和SDK(包含帮助文档和例子),以及丰富的 Silverlight 视频教程。你应该下载Silverlight SDK,因为它含有大量的帮助文档和快速入门实例,这有利于降低学习难度,并让你迅速了解对XAML和Silverlight概念。阅读全文
    posted @ 2011-04-25 13:46 罗敏贵 阅读(286) | 评论 (1) 编辑
     
    摘要: C# 随机产生常用汉字 先保存以后要用的时候直接拿过来用就可以了。 /// <summary> /// 随机产生常用汉字 /// </summary> /// <param name="count">要产生汉字的个数</param> /// <returns>常用汉字</returns> private List<string> GenerateChineseWords(int count) { List<string> chineseWords = new List<st阅读全文
    posted @ 2011-03-31 15:00 罗敏贵 阅读(55) | 评论 (0) 编辑
     
    摘要: 命名空间: using System.Collections.Generic;C# Dictionary 终极使用方法Dictionary 排序List<KeyValuePair<int, string>> list = new List<KeyValuePair<int, string>>(dic);list.Sort();最近寫案子常常用到List<T>,這個東西還真好用因為它有下列東西:List<T>.Sort() → 排序TList<T>.Find() → 找出一個TList<T>.Fin阅读全文
    posted @ 2011-03-30 16:26 罗敏贵 阅读(41) | 评论 (0) 编辑
     
    摘要: 代码Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->方法一:private void Button13_Click(object sender, System.EventArgs e) { this.Datagrid4.Visible=true; Response.Clear(); Response.Buffer= true; Response.Charset="GB2312"; Response.AppendHeader阅读全文
    posted @ 2010-08-22 21:53 罗敏贵 阅读(261) | 评论 (0)  编辑
     
    摘要: 效果图:代码Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--><html xmlns="http://www.w3.org/1999/xhtml" ><head runat="server"> <title>_编辑页</title> <script type="text/javascript" src="../js/Off阅读全文
    posted @ 2010-08-09 17:07 罗敏贵 阅读(347) | 评论 (0)  编辑
     
    摘要: 代码阅读全文
    posted @ 2010-07-22 08:41 罗敏贵 阅读(74) | 评论 (0) 编辑
     
    摘要: 代码Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.IO;namespace U盘更新{ public 阅读全文
    posted @ 2010-06-30 09:28 罗敏贵 阅读(253) | 评论 (0) 编辑
     
    摘要: 1.DateTime  1 DateTime now = System.DateTime.Now;  2 now.ToString(); //显示: 2006/08/30 17:31:02  3 now.ToString("yyyy-mm-dd hh:MM:ss"); //显示: 2006-08-30 05:39:11  4 now.ToString("yyyy-mm-dd HH:mm:ss");...阅读全文
    posted @ 2010-04-15 08:51 罗敏贵 阅读(72) | 评论 (0) 编辑
     
    摘要: comboBox和textBox支持内置的搜索提示功能, 在form的InitializeComponent()中添加如下语句: this.comboBox1.AutoCompleteCustomSource.AddRange(new string[] { "10.152.154.89", "10.152.154.90", "10.152.252.10", "10.152.252.11" });//是将数据添加到搜索范围//默认是None,还有Append,和SuggestAppend属性,除了默认的None都可以阅读全文
    posted @ 2010-03-17 15:31 罗敏贵| 编辑
     
    摘要: SqlBulkCopy是.net2.0的新特性,平时用的很少,但是其功能却是非常强大,对于批量插入数据性能非常优越代码经过1000条数据的对比测试,一般性的循环插入与sqlbulk插入的时间对比为:一般插入:使用时间0.5200008秒使用builk插入:使用时间0.02秒性能非常优越阅读全文
    posted @ 2010-03-11 04:29 罗敏贵 阅读(439) | 评论 (0) 编辑
     
    摘要: 代码Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->///<summary>///反序列化///</summary>///<paramname="type">对象类型</param>///<paramname="filename">文件路径</param>///<returns></returns>publi阅读全文
    posted @ 2010-03-08 16:55 罗敏贵 阅读(1198) | 评论 (1) 编辑
     
    摘要: 代码Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->///在使用本例之前要先手动引用system.configration组件,然后建立config文件,config文件名为当前程序文件名的后面加.config比如:a.exe.configusingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.Configuration;usingSystem.Data;us阅读全文
    posted @ 2010-03-04 14:45 罗敏贵 阅读(120) | 评论 (0) 编辑
     
    摘要: [DllImport("wininet.dll")]privateexternstaticboolInternetGetConnectedState(outintconnectionDescription,intreservedValue);privateboolIsConnected(){intI=0;boolstate=InternetGetConnectedState(outI,0);ret...阅读全文
    posted @ 2010-03-03 23:12 罗敏贵 阅读(172) | 评论 (0) 编辑
     
    摘要: 1. 面向对象的思想主要包括:继承 多态 封装● 封装:用抽象的数据类型将数据和基于数据的操作封装在一起,数据被保护在抽象数据类型内部。● 继承:子类拥有父类的所有数据和操作。● 多态:一个程序中同名的不同方法共存的情况。 有两种形式的多态– 重载与重写。2. 什么是装箱和拆箱装箱(boxing)和拆箱(unboxing)机制使得在C#类型系统中,任何值类型、引用类型和object(对象)类型之间进行转换,这种转换称为绑定连接。简单地说,有了装箱和拆箱的概念,对任何类型的值来说最终都可看作是object类型。 1、装箱转换含义:将一个值类型隐式地转换成一个object类型,或把这个值类型转换成阅读全文
    posted @ 2010-03-03 22:59 罗敏贵 阅读(2444) | 评论 (3) 编辑
     
    摘要: 主要是在实体类中验证using System;namespace Jone.Function.attribute{ /// <summary> /// 附加在数据实体用于描述如何验证合法性 /// </summary> [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false, Inherited = true)] public sealed class ValidateAttribute : Attribute { private bool _allowNull = tr阅读全文
    posted @ 2010-02-26 13:34 罗敏贵 阅读(142) | 评论 (0) 编辑
     
    摘要: 刚刚去了一家公司面试,他们让我上机做一个类似计划任务的模块,在配置文件里写要执行的时间,让程序定时执行。1.建立配置文件App.config<?xml version="1.0" encoding="utf-8" ?><configuration> <appSettings> <!--设定每月执行计划任务的日期,先设定每月的16号,17号,25号执行--&...阅读全文
    posted @ 2010-02-08 16:21 罗敏贵 阅读(280) | 评论 (0) 编辑
     
    摘要: 本文摘自人民邮电出版社出版的《Windows Forms程序设计》(Chris Sells著,荣耀、蒋贤哲译)。 通过一个栩栩如生的虚构故事解释了C#/.NET中委托和事件的机制和应用。 1 委托 从前,在南方的一个异国他乡,有一个叫Peter的勤劳的工人,他对老板(boss)百依百顺,然而他的boss却是个卑鄙多疑的家伙,他坚持要求Peter不断汇报工作进展。由于Peter不希望被boss盯着干活,于是他向boss承诺随时汇报工作进度。Peter通过如下所示的类型化的引用(typed reference)定期回调boss来实现这个承诺: class Worker { public void 阅读全文
    posted @ 2008-12-10 09:08 罗敏贵 阅读(11) | 评论 (0) 编辑
     
    摘要: 昨天晚上看MSDN看见的一段通过使用SetClassLong函数使窗口下面拥有一个阴影效果,研究代码找资料弄了半个小时把它运用在了C#2.0上,特此一贴。由于我使用的方法是调用系统API,所以在引用声明这块要加上一句:using System.Runtime.InteropServices;然后再窗口类的随便哪个地方加上:const int CS_DROPSHADOW = 0x20000;const int GCL_STYLE = (-26);//声明Win32 API[DllImport("user32.dll", CharSet = CharSet.Auto)]public static 阅读全文
    posted @ 2008-11-11 10:43 罗敏贵 阅读(22) | 评论 (0) 编辑
     
    摘要: /// /// 开启SQL Server服务 /// public static void ProSQLServer() { Process pro = new Process(); pro.StartInfo.FileName = "cmd.exe"; pro.StartInfo.UseShellExecute = false; pro.StartInfo.RedirectStandardInput = true; pro.StartInfo.RedirectStandardOutput = true; pro.StartInfo.RedirectStandardError = true阅读全文
    posted @ 2008-11-07 10:54 罗敏贵 阅读(8) | 评论 (0) 编辑
  • 相关阅读:
    12-五子棋游戏:享元模式
    11-制作糖醋排骨:外观模式
    10-蒸馒头:装饰者模式
    09-公司层级结构:组合模式
    08-开关与电灯:桥接模式
    07-电源转换:适配器模式
    将博客搬至CSDN
    iview和element中日期选择器快捷选项的定制控件
    详解AJAX工作原理以及实例讲解(通俗易懂)
    最全肌肉锻炼动图
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2432379.html
Copyright © 2020-2023  润新知