博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于使用wcf架构分布式系统的一点想法
阅读量:6968 次
发布时间:2019-06-27

本文共 1278 字,大约阅读时间需要 4 分钟。

使用iis host wcf,可以很方便的做负载均衡。

利用这个特点,可以在架构的时候把逻辑层,数据层等部分以wcf的形式发布。

并且,对一个大型系统来说,总是有若干不同的模块,这些模块有些使用量大,有些使用量小,对每个模块都以wcf的形式发布,那么我们可以给使用量大的模块多负载几个,而使用量小的则少负载。

但是使用wcf,会带来额外的性能开销。比如非常少用到模块,他本来可以和网站放在一起,那他们是在一个应用程序域里的,但是以wcf形式发布,就分到2个应用程序域里;使用wcf必然要面对序列化,网络通讯等这些方面的新能损失;为了让服务可以同时服务更多的人,这些性能上的损失是必要的,但服务本来服务的人就不多,这个性能上的损失就不必要。

在开发阶段,我们无法确定上线后哪个模块访问度,哪个模块访问少。

即便是可以确定,如果把认为多的以wcf的形式开发,少的以系统内开发。这个时候在一个项目里会有2套不同的开发方式,不统一,意为着开发人员的难度变大。而且随着业务的增长,以前认为是小的部分现在压力也顶不住了,要改成wcf的形式,改动起来也比较大。

但是真正执行的代码其实就是那个类,就是那些代码。

很自然就想到使用一个ioc容器来解决这个问题,在开发时,统一使用wcf的形式。在部署时,先以wcf的形式部署(配置文件都写好),这个时候web是不引用wcf的dll的,只是引用了web服务。如果要把wcf放到和web一个进程中,只要把wcf的dll考到web的bin目录下就可以了。

以下使用autofac作为ioc容器做实验。

 

建立web项目及wcf项目

把wcf的服务契约提炼到一个新的项目里,这个项目里只有接口,并且这个项目要被web引用。web不引用wcf项目。

在web项目的web.config里写好wcf的调用配置,可以先用vs引用生成。

最后在global里配置autofac

 

try{    var path = AppDomain.CurrentDomain.BaseDirectory;    var ass = Assembly.LoadFrom(path + "bin\\WCFHelper.dll");    builder.RegisterAssemblyTypes(ass).AsImplementedInterfaces();}catch{    builder.Register
(x=>new ChannelFactory
("IMyEnd").CreateChannel()).OnRelease(x=>((IClientChannel)x).Close());}

如果本地有dll,则直接注册

如果没有,则需要手动添加所有的服务,并给定配置。

切换是否使用wcf,只需要在web的bin文件夹里存在/不存在 对应的dll

转载于:https://www.cnblogs.com/czcz1024/archive/2013/01/11/2856545.html

你可能感兴趣的文章
Http与协议TCP协议简单易懂
查看>>
使用 JavaScript 实现基本队列、优先队列和循环队列
查看>>
安卓图表引擎AChartEngine(二) - 示例源码概述和分析
查看>>
python模块之imghdr(识别不同格式的图片文件)
查看>>
HDU 1823 Luck and Love 二维线段树
查看>>
ecshop二次开发常用代码
查看>>
GCD编程 之 略微提高篇
查看>>
第十四章 数字签名算法--RSA
查看>>
Deep Learning for Nature Language Processing --- 第四讲(下)
查看>>
第一次打开Photoshop时的基本设置
查看>>
讲座:计算机专业及其学习
查看>>
CentOS 7 启动、重启、chkconfig等命令已经合并为systemctl
查看>>
POI 中的CellRangeAddress 参数
查看>>
Http Request
查看>>
Map集合中value()方法与keySet()、entrySet()区别 《转》
查看>>
Thrift反序列化导致OOM(转)
查看>>
自定义用户登录,会话保持,登录后自动跳转原页面
查看>>
Quartz的cronTrigger表达式
查看>>
李洪强经典iOS面试题11
查看>>
知乎上关于游戏引擎的讨论
查看>>