前往Shuct.Net首页

Shudepb PB反编译专家长时间以来,为业内同类软件事实上的唯一选择.细节,彰显专业.态度,决定品质.

关于反编译的搜索

.Net Remoting的C/S分离也说两句 - 十一居士的日志 - 网易博客 网易 新闻 微博 邮箱 相册 阅读 有道 摄影 爱拍 优惠券 云笔记 闪电邮 手机邮 印像派 网易识字 更多 博客 手机博客 博客搬家 博客VIP服务 LiveWriter写博 word写博 邮件写博 短信写博 群博客 博客油菜地 博客话题 博客热点 博客圈子 找朋友 发现 小组 风格 手机博客 网易真人搭配社区iStyle 下载最文艺的手机博客APP> 下载最文艺的手机博客APP> 下载最文艺的手机博客APP> 创建博客 登录 加关注 显示下一条 | 关闭 温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》 | 关闭 鲲游别馆 与有肝胆人共事 从无字句处读书 导航 首页 日志 相册 音乐 收藏 博友 关于我 日志 .Net Remoting的C/S分离也说两句 2014-02-20 20:02:56| 分类: .NET | 标签: |举报 |字号大中小 订阅 http://blog.csdn.net/withinoneyear/article/details/180657思念是一种痛苦还是幸福呢?至少生命中曾有一个人在心头萦绕吧。如果能够彻底的忘却,我是否应该选择?今夜的雨紧锣密鼓,让人莫名的压抑,心底的她也趁势要将那一丝遥远的记忆牵回。。。闲 敲键盘成博客。话说微软出了个.Net,搞了个Remoting要来终结DCOM。且不论成败如何,至少在性能优先快速开发的路途中总算多了一个铲铲。刚 巧最近做个东西,也要在局域网中搞通讯,于是乎就选择了这个Remoting。一切顺利,闲话不表。单说做完之后要部署。那么这个远程的Remoting 组件自然就不能放在客户端了,不过因为开发时为图方便,直接将这些组件引用到了客户端程序中,这样就必须找个分开的法子。网上找找,办法还不少,无非是就 是大家都知道的做接口或者脱壳。一般高人们都是用接口的,至少我看的代码里大部分都是这么干的,当然了,OO嘛。可是一用接口就麻烦了,我怎么能直接通过 new来生成远程对象呢?而且那么多类,要写多少接口啊,太累了,自然不干。那就只能脱壳了。同样的,太多了。没办法,只能做个自动生成空壳dll的工具 了,反编译俺是不会,不过得到程序集的结构还是很容易的。方法嘛大家都知道。只是觉得这个工具还多少有些用,记在这里,方便以后查阅:[code]public string CreateFileContent(){ StringBuilder sb = new StringBuilder(); System.Windows.Forms.OpenFileDialog ofd = new OpenFileDialog(); ofd.Filter = "程序集文件|*.dll"; if (ofd.ShowDialog() == DialogResult.OK) { string fname = ofd.FileName; if (fname != null && fname !="" && File.Exists(fname)) { // 得到程序集 System.Reflection.Assembly asm = System.Reflection.Assembly.LoadFrom(fname); Type[] ts = asm.GetTypes(); ArrayList Atypes = new ArrayList(); // 命名空间 System.Collections.Specialized.StringCollection ns = new System.Collections.Specialized.StringCollection(); foreach (Type t in ts) { Atypes.Add(t); if (!ns.Contains(t.Namespace)) ns.Add(t.Namespace); } sb.Append("using System;/nusing System.IO;/nusing System.Text;/nusing System.Collections;/nusing System.Data;/n"); sb.Append("using System.Data.SqlClient;/n/n"); foreach (string nameSpace in ns) { sb.Append("#region ").Append(nameSpace).Append("/n"); sb.Append("namespace "); sb.Append(nameSpace); sb.Append("/n{/n"); // 类、结构 Type[] types = (Type[])Atypes.ToArray(typeof(Type)); foreach (Type t in types) { if (t.Namespace != nameSpace) continue; Atypes.Remove(t); // 枚举 if (t.IsEnum) { string[] nns = System.Enum.GetNames(t); int[] nvs = (int[])System.Enum.GetValues(t); sb.Append("/t"); if (t.IsPublic) sb.Append("public "); if (t.IsNestedFamily) sb.Append("protected "); if (t.IsNestedFamily) sb.Append("internal "); if (t.IsNestedPrivate) sb.Append("private "); sb.Append("enum ").Append(t.Name).Append("/n/t{/n"); for (int i= 0; i < nns.Length; i++) { sb.Append("/t/t").Append(nns[i]).Append(" = ").Append(nvs[i]); if (i < nns.Length - 1) sb.Append(","); sb.Append("/n"); } sb.Append("/t}/n/n"); continue; } // 代理 if (t.BaseType == typeof(System.MulticastDelegate)) { Type[] dts = t.GetInterfaces(); if (dts.Length == 2 && ((dts[0] == typeof(System.ICloneable) && dts[1] == typeof(System.Runtime.Serialization.ISerializable)) || (dts[1] == typeof(System.ICloneable) && dts[0] == typeof(System.Runtime.Serialization.ISerializable)))) { MethodInfo dmi = t.GetMethod("Invoke"); if (dmi != null) { sb.Append("/t"); if (t.IsPublic) sb.Append("public "); if (t.IsNestedFamily) sb.Append("protected "); if (t.IsNestedFamily) sb.Append("internal "); if (t.IsNestedPrivate) sb.Append("private "); sb.Append("delegate "); if (dmi.ReturnType == typeof(void)) sb.Append("void "); else sb.Append(dmi.ReturnType.FullName).Append(" "); sb.Append(t.Name).Append("("); ParameterInfo[] dpi = dmi.GetParameters(); for (int i = 0; i < dpi.Length; i++) { if (dpi[i].IsOptional) sb.Append("params "); else if (dpi[i].IsOut) sb.Append("out "); else if(dpi[i].ParameterType.FullName.EndsWith("&")) sb.Append("ref "); sb.Append(dpi[i].ParameterType.FullName.Replace("&", "")).Append(" "); sb.Append(dpi[i].Name); if (i < dpi.Length - 1) sb.Append(", "); } sb.Append(");/n/n"); continue; } } } sb.Append("/t#region ").Append(t.FullName).Append("/n"); if (t.IsSerializable) sb.Append("/t[Serializable]/n"); if (t.IsInterface) sb.Append("/tpublic interface " + t.Name); else if (t.IsValueType) sb.Append("/tpublic struct " + t.Name); else { sb.Append("/tpublic "); if (t.IsSealed) sb.Append("sealed "); else if (t.IsAbstract) sb.Append("abstract "); sb.Append("class " + t.Name); } if (t.BaseType != null && !t.IsValueType) sb.Append(" : " + t.BaseType.FullName); // 继承的接口 Type[] its = t.GetInterfaces(); Type[] iits; ArrayList al = new ArrayList();; if (t.BaseType != null) { iits = t.BaseType.GetInterfaces(); foreach (Type iii in iits) al.Add(iii); } foreach (Type ti in its) { if (t.BaseType == null || !al.Contains(ti)) { sb.Append(", ").Append(ti.FullName); } } sb.Append("/n/t{/n"); // 构造函数 ConstructorInfo[] cs = t.GetConstructors(); foreach (ConstructorInfo c in cs) { if (!c.IsPrivate) { sb.Append("/t/t"); if (c.IsFamily) sb.Append("protected "); else if (c.IsPublic) sb.Append("public "); if (c.IsStatic) sb.Append("static "); if (c.IsAbstract) sb.Append("abstract "); if (c.IsVirtual) sb.Append("virtual "); sb.Append(t.Name); sb.Append("("); // 参数 ParameterInfo[] pis = c.GetParameters(); for (int i = 0; i < pis.Length; i++) { if (pis[i].IsOptional) sb.Append("params "); else if (pis[i].IsOut) sb.Append("out "); else if(pis[i].ParameterType.FullName.EndsWith("&")) sb.Append("ref "); sb.Append(pis[i].ParameterType.FullName.Replace("&", "")).Append(" "); sb.Append(pis[i].Name); if (i < pis.Length - 1) sb.Append(", "); } sb.Append(")"); sb.Append("/n/t/t{/n"); sb.Append("/t/t}/n"); } } // 可见成员 FieldInfo[] fs = t.GetFields(BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance); foreach (FieldInfo f in fs) { if (!f.IsPrivate) { sb.Append("/t/t"); if (!t.IsInterface) { if (f.IsFamily) sb.Append("protected "); else if (f.IsPublic) sb.Append("public "); if (f.IsAssembly) sb.Append("internal "); if (f.IsLiteral) sb.Append("const "); else if (f.IsStatic) sb.Append("static "); if (f.IsInitOnly) sb.Append("readonly "); } sb.Append(f.FieldType.FullName); sb.Append(" "); sb.Append(f.Name); sb.Append(";/n/n"); } } // 可见Property PropertyInfo[] ps = t.GetProperties(BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance); foreach (PropertyInfo p in ps) { MethodInfo mi = p.GetAccessors()[0]; if (!mi.IsPrivate) { sb.Append("/t/t"); if (!t.IsInterface) { if (mi.IsFamily) sb.Append("protected "); else if (mi.IsPublic) sb.Append("public "); if (mi.IsAssembly) sb.Append("internal "); if (mi.IsStatic) sb.Append("static "); if (mi.IsAbstract) sb.Append("abstract "); if (mi.GetBaseDefinition().DeclaringType != t) sb.Append("override "); else if (mi.IsVirtual && !t.IsSealed) sb.Append("virtual "); } sb.Append(p.PropertyType.FullName); sb.Append(" "); sb.Append(p.Name); sb.Append("/n/t/t{/n"); if (p.CanRead) { if (!t.IsInterface) { sb.Append("/t/t/tget{"); if (p.PropertyType == typeof(int) || p.PropertyType == typeof(decimal) || p.PropertyType == typeof(short)) sb.Append("return 0;"); else if (p.PropertyType == typeof(bool)) sb.Append("return false;"); else if (p.PropertyType == typeof(DateTime)) sb.Append("return DateTime.Now;"); else if (p.PropertyType.IsValueType && !p.PropertyType.IsPrimitive) sb.Append("/n/t/t/treturn new ").Append(p.PropertyType.FullName).Append("();"); else sb.Append("return null;"); sb.Append("}/n"); } else sb.Append("/t/t/tget;/n"); } if (p.CanWrite) { if (!t.IsInterface) sb.Append("/t/t/tset{}/n"); else sb.Append("/t/t/tset;/n"); } sb.Append("/t/t}/n"); } } // 可见方法 MethodInfo[] ms = t.GetMethods(BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance); foreach (MethodInfo m in ms) { if (!m.IsSpecialName && !m.IsPrivate) { sb.Append("/t/t"); if (!t.IsInterface) { if (m.IsFamily) sb.Append("protected "); else if (m.IsPublic) sb.Append("public "); if (m.IsAssembly) sb.Append("internal "); if (m.IsStatic) sb.Append("static "); if (m.IsAbstract) sb.Append("abstract "); if (m.GetBaseDefinition().DeclaringType != t) sb.Append("override "); else if (m.IsVirtual) { // 如果密封类,则不能再指定为virtual if (!t.IsSealed) sb.Append("virtual "); } } if (m.ReturnType != typeof(void)) sb.Append(m.ReturnType.FullName); else sb.Append("void"); sb.Append(" "); sb.Append(m.Name); sb.Append("("); // 参数 ParameterInfo[] pis = m.GetParameters(); for (int i = 0; i < pis.Length; i++) { if (pis[i].IsOptional) sb.Append("params "); else if (pis[i].IsOut) sb.Append("out "); else if(pis[i].ParameterType.FullName.EndsWith("&")) sb.Append("ref "); sb.Append(pis[i].ParameterType.FullName.Replace("&", "")).Append(" "); sb.Append(pis[i].Name); if (i < pis.Length - 1) sb.Append(", "); } sb.Append(")"); if (!t.IsInterface) { sb.Append("/n/t/t{/n"); // 对于out参数,在返回前需先赋值 for (int i = 0; i < pis.Length; i++) { if (pis[i].IsOut) { sb.Append("/t/t/t").Append(pis[i].Name).Append(" = "); if (m.ReturnType == typeof(int) || m.ReturnType == typeof(decimal) || m.ReturnType == typeof(short)) sb.Append("0;/n"); else if (m.ReturnType == typeof(bool)) sb.Append("false;/n"); else if (m.ReturnType == typeof(DateTime)) sb.Append("DateTime.Now;/n"); else if (m.ReturnType.IsValueType && !m.ReturnType.IsPrimitive) sb.Append("new ").Append(m.ReturnType.FullName).Append("();/n"); else sb.Append("null;/n"); } } if (m.ReturnType != typeof(void)) { if (m.ReturnType == typeof(int) || m.ReturnType == typeof(decimal) || m.ReturnType == typeof(short)) sb.Append("/t/t/treturn 0;/n"); else if (m.ReturnType == typeof(bool)) sb.Append("/t/t/treturn false;/n"); else if (m.ReturnType == typeof(DateTime)) sb.Append("/t/t/treturn DateTime.Now;/n"); else if (m.ReturnType.IsValueType && !m.ReturnType.IsPrimitive) sb.Append("/t/t/treturn new ").Append(m.ReturnType.FullName).Append("();/n"); else sb.Append("/t/t/treturn null;/n"); } sb.Append("/t/t}/n"); } else sb.Append(";/n"); } } sb.Append("/t}/n/t#endregion/n/n"); } // end for sb.Append("}/n/n"); sb.Append("#endregion/n/n"); } // foreach namespace } return sb.ToString(); } // if openfiledialog return null;}[/code] 评论这张 转发至微博 转发至微博 阅读(4)| 评论(0) | 分享到: 喜欢 推荐 0人 | 转载 历史上的今天 最近读者 热度 评论 this.p={ m:2, b:2, id:'fks_087071085087080074085095085070072087089075081085095069080', blogTitle:'.Net Remoting的C/S分离也说两句', blogAbstract:'\nhttp://blog.csdn.net/withinoneyear/article/details/180657思念是一种痛苦还是幸福呢?至少生命中曾有一个人在心头萦绕吧。如果能够彻底的忘却,我是否应该选择?今夜的雨紧锣密鼓,让人莫名的压抑,心底的她也趁势要将那一丝遥远的记忆牵回。。。闲\n敲键盘成博客。话说微软出了个.Net,搞了个Remoting要来终结DCOM。且不论成败如何,至少在性能优先快速开发的路途中总算多了一个铲铲。刚\n巧最近做个东西,也要在局域网中搞通讯,于是乎就选择了这个Remoting。一切顺利,闲话不表。单说做完之后要部署。那么这个远程的Remoting\n组件自然就不能放在客户端了,不过因为开发时为图方便,直接将这些组件引用到了客户端程序中,这样就必须找个分开的法子。网上找', blogTag:'', blogUrl:'blog/static/1885396420141208256338', isPublished:1, istop:false, type:0, modifyTime:0, publishTime:1392897776338, permalink:'blog/static/1885396420141208256338', commentCount:0, mainCommentCount:0, recommendCount:0, bsrk:-100, publisherId:0, recomBlogHome:false, currentRecomBlog:false, attachmentsFileIds:[], vote:{}, groupInfo:{}, friendstatus:'none', followstatus:'unFollow', pubSucc:'', visitorProvince:'', visitorCity:'', visitorNewUser:false, postAddInfo:{}, mset:'000', mcon:'', srk:-100, remindgoodnightblog:false, isBlackVisitor:false, isShowYodaoAd:false, hostIntro:'北冥有鱼,其名为鲲,鲲之大不知其几千里也,\r\n化而为鸟,其名为鹏,鹏之背不知其几千里也,\r\n……', hmcon:'0', selfRecomBlogCount:'0', lofter_single:'' } {list a as x} {if !!x} {if x.visitorName==visitor.userName} {else} {/if} {if x.moveFrom=='wap'} {elseif x.moveFrom=='iphone'} {elseif x.moveFrom=='android'} {elseif x.moveFrom=='mobile'} {/if} ${fn(x.visitorNickname,8)|escape} {/if} {/list} {if !!a} ${fn(a.nickname,8)|escape} ${a.selfIntro|escape}{if great260}${suplement}{/if} {/if} {list a as x} {if !!x} ${fn(x.title,26)|escape} {/if} {/list} 推荐过这篇日志的人: {list a as x} {if !!x} ${fn(x.recommenderNickname,6)|escape} {/if} {/list} {if !!b&&b.length>0} 他们还推荐了: {list b as y} {if !!y} &#183;${y.recommendBlogTitle|escape} {/if} {/list} {/if} 转载记录: {list d as x} &#183; ${x.referBlogTitle|escape} ${x.referUserName|escape} {/list} {list a as x} {if !!x} ${x.title|default:""|escape} {/if} {/list} {list a as x} {if !!x} ${x.title|default:""|escape} {/if} {/list} {list a as x} {if !!x} ${x.blogTile|default:""|escape} {/if} {/list} {list a as x} {if x_index>4}{break}{/if} {if !!x} ${fn1(x.title,60)|escape}${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')} {/if} {/list} {list a as x} {if !!x} ${fn(x.title,26)|escape} {/if} {/list} {if !!(blogDetail.preBlogPermalink)} ${blogDetail.preBlogTitle|escape} {/if} {if !!(blogDetail.nextBlogPermalink)} ${blogDetail.nextBlogTitle|escape} {/if} {list a as x} {if !!x} {if x.publisherUsername==visitor.userName} {else} {/if} ${fn(x.publisherNickname,8)|escape} {/if} {/list} 被推荐日志 最新日志 该作者的其他文章 博主推荐 随机阅读 首页推荐 更多>> {list a as x} {if !!x} ${x.nickName|escape} 投票给 {var first_option = true;} {list x.voteDetailList as voteToOption} {if voteToOption==1} {if first_option==false},{/if} “${b[voteToOption_index]}” {/if} {/list} {if (x.role!="-1") },“我是${c[x.role]}” {/if} ${fn1(x.voteTime)} {if x.userName==''}{/if} {/if} {/list} 页脚 公司简介 - 联系方法 - 招聘信息 - 客户服务 - 隐私政策 - 博客风格 - 手机博客 - VIP博客 - 订阅此博客 网易公司版权所有 &copy;1997-2014 帮助 ${u} {list wl as x} ${x.g} {list x.l as y} ${y.n} {/list} {/list} {if defined('wl')} {list wl as x}${x.n}{/list} {/if}