c# WINFORM 分布式系统架构疑问

kebixiong111 2011-09-14 08:52:14
开发公司内部管理系统,综合考虑各方面因素,最后放弃B/S,
采用C/S分布式开发。
数据库服务器单独,放总部。
分公司通过CLIENT,通过中间层访问数据库。
但是我有疑问,
中间层比如我用WEB SERVICE,
我如何做部署?
WEB SERVICE服务器我是放分公司本地好还是放总部好?
WEB SERVICE除了作为一个通用访问数据库函数,
具体还起到哪些具体作用?比如缓存怎么缓的?性能上怎么提高的?

谢谢!!!
...全文
547 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
secretpp 2012-01-15
  • 打赏
  • 举报
回复
错误,中间层肯定不能用webservice, 要用remoting,webservice在频繁的增删改查,效率超慢,用微软的remting就可以解决这个问题,基本上不慢,安全和性能全部解决了,
  • 打赏
  • 举报
回复
[Quote=引用楼主 kebixiong111 的回复:]
WEB SERVICE除了作为一个通用访问数据库函数,
具体还起到哪些具体作用?比如缓存怎么缓的?性能上怎么提高的?[/Quote]
从通讯角度,web service只要是给业余开发人员使用的,它只能支持get/post类似的操作。而如果你要开发一个c/s通讯程序,其实往往需要考虑双向通讯,就好象一个最简单的网络游戏也要考虑双向通讯而不是什么web service一样。

真正的软件,大部分的设计核心都是活动,特别是真正好的软件总是对于Get和Push方式的信息操作的比例不会高于2:1的。简单地举例比如说有一些人正在讨论一个项目计划,那么这个场景中所谓的Get操作都有哪些?可能有人会说:“需要获取讨论组、获取这个讨论组的主管、获取它的管理员、获取它的成员、获取它的消息、获取谁在邀请别人、获取针对自己的邀请信息、获取别人随时加入或者退出讨论组的信息、获取讨论组的各种操作权限分配”等等。

然而这个人肯定不是真正的做过通讯软件的设计者,而只是一个编写中国风格的OA程序的。很简单,比如说你给别人发一个短信,不是说你的手机把短信保存到移动公司的数据库里然后别人的手机去查询短信;你给别人打电话时其技术设计更不是什么在数据库中对音频数据的什么增删改查。再看上面的所谓Get操作,从c/s软件设计角度,很多都首先是“不落地”的,如果以很低的线程优先级保存到保存到数据库也是为了后备、或者计费、或者营业统计分析等等。当一个成员邀请别人,或者一个成员发送消息给大家伙,消息就直接推送到大家的桌面上了,而不管它是否保存到数据库中。就算是调用web service方式,那么消息如何立刻广播到加入同一个讨论组的桌面应用程序上,以什么样的方式推送什么样的实体数据,这些要在你动手写代码之前设计好(而很多小软件作坊那样学点web service概念于是就动手编写程序了,那么很快就会因为没有实际的通讯设计架构,于是又回到了c/s数据库增删改查的老路)。


好,回到你的问题,web service服务设计可以不可以不纠结于什么关系数据库表的增删改查?可以不可能有好一点的性能?答案是首先你要把它作为一个企业服务,让那种基于数据库操作的设计思维渐渐地丝毫不纠结在设计文旦中,然后才会逐渐学会基于更加专业的双工操作、长期稳定的通讯方式来设计所谓的“分布式”系统。
_三皮_ 2011-09-14
  • 打赏
  • 举报
回复
web service 放在总部,不但可以处理访问数据库,还可以处理需要部署在服务器的其它逻辑。
bluedoctor 2011-09-14
  • 打赏
  • 举报
回复
如果你要用WEB SERVICE作为通用的数据查询,还不如直接使用SQLSERVER的XML查询,它可以通过HTTP访问。
可以考虑使用邮件系统作为通信渠道,这样你们总公司和分公司可以物理上不直接相连,只要都可以收发邮件即可,可大大增加系统安全性,详细方案,请参考这里
  • 打赏
  • 举报
回复
[Quote=引用楼主 kebixiong111 的回复:]
中间层比如我用WEB SERVICE,
我如何做部署?[/Quote]

只要是SOA,它必定是将服务器组放在一个相对隐蔽的位置,然后所有其它子系统都是访问这个系统的应用程序服务,而不是什么关系数据库。几乎可以说,在跨路由器的范围内,不考虑c/s数据库客户端。
kebixiong111 2011-09-14
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 chenyingshu880603 的回复:]
引用 9 楼 zyloveyrf 的回复:
引用 4 楼 kebixiong111 的回复:
B/S的确是好,但是我们业务很复杂,用户对于操作性要求非常强大,当然B/S也可以做到,但是开发成本太高了。

确实 b/s性能的确比c/s好 但是相对来说成本高很多 其实LZ说的数据库放在总部还是分公司好这个问题

这个要据情况而定

++

服务器当然放总部好,在这种系统来说还是B/……
[/Quote]

说过了啊,B/S我也知道好啊,但是客户端操作要求很高。用B/S很难得到用户的使用要求。
用户第一,用B/S还是C/S我们是做过详细调研才得出的结论,所以也不用告诉我B/S好,我也知道的。
Gemini Dean 2011-09-14
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 zyloveyrf 的回复:]
引用 4 楼 kebixiong111 的回复:
B/S的确是好,但是我们业务很复杂,用户对于操作性要求非常强大,当然B/S也可以做到,但是开发成本太高了。

确实 b/s性能的确比c/s好 但是相对来说成本高很多 其实LZ说的数据库放在总部还是分公司好这个问题

这个要据情况而定
[/Quote]
++

服务器当然放总部好,在这种系统来说还是B/S好点吧
hen_ai_hen_ai_ni 2011-09-14
  • 打赏
  • 举报
回复
或者限制客户端mac或者绑定cpu一类更BT的方式……
hen_ai_hen_ai_ni 2011-09-14
  • 打赏
  • 举报
回复
如果分公司和总部处于局域网,那怎么都好说,如果不是,webservice是必然的选择。上面都说了不少,至于安全性么,是必然要考虑的,比如说限制IP或者验证机制等等,我之前用的比较多的是动态口令的方式,原理就是提供一个初始化的口令,然后每次访问后都会生成一个新的口令给客户端,然后客户端下次调用时提供的口令不符合就拒绝。这个其实比较简单,但是也会存在局限性,例如如果知道初始密码以后就畅行无阻了,不过还好。因为不可能就这一个参数,另外的参数你可以传递复杂的内容,例如自定义的xml或者加密文件包,都可以
萧炎 2011-09-14
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 kebixiong111 的回复:]
B/S的确是好,但是我们业务很复杂,用户对于操作性要求非常强大,当然B/S也可以做到,但是开发成本太高了。
[/Quote]
确实 b/s性能的确比c/s好 但是相对来说成本高很多 其实LZ说的数据库放在总部还是分公司好这个问题

这个要据情况而定
萧炎 2011-09-14
  • 打赏
  • 举报
回复
web services提供了三个属性
Namespace:此属性的值包含 XML Web Service的默认命名空间。XML命名空间提供了一种在XML文档中创建名称的方法,该名称可由统一资源标识符(URI)标识。如果不指定命名空间,则使用默认命名空间 http://tempuri.org/
Name:此属性的值包含XML Web Service的名称。在默认情况下,该值是实现XML Web Service的类的名称。
Description:此属性的值包含描述性消息,此消息将在XML Web Service的说明文件(例如服务说明和服务帮助页)生成后显示给XML Web Service的潜在用户

这个也算web services的作用吧
calmzeal 2011-09-14
  • 打赏
  • 举报
回复
我们当时也是 客户端的操作太多
所以只把数据交互的步骤用 ws来做

现在已经转向bs了 花了一年多时间才改过来
calmzeal 2011-09-14
  • 打赏
  • 举报
回复
我们之前系统就这么做的
而且客户端还是delphi开发的

ws放服务器端,只提供对一些 数据库封装操作 (比如一张数据表指定数据的下载 上传操作)
和用户校验等
不适用ssl的话,ws基本上就是透明的,如果你打算提供直接的数据库操作类 比如sqlhelper的ws功能,至少把sql语句进行加密后作为参数使用吧
ws本身安全机制采用自定义SoapHeader和自己实现的用户令牌(类似Cookie Based Session)来实现的

性能方面由于应用服务器只提供函数级应用,比一般的web服务器要好些
页面级缓存之类基本上是不需要用到的,数据缓存就按照asp.net处理就行 不过我们当时没用到
另外,根据cpu核数配置web园数量,对性能提升比较大

就这些了,希望有用
kebixiong111 2011-09-14
  • 打赏
  • 举报
回复
B/S的确是好,但是我们业务很复杂,用户对于操作性要求非常强大,当然B/S也可以做到,但是开发成本太高了。
TMajier 2011-09-14
  • 打赏
  • 举报
回复
webservice当时是发在总部的了!部署在总部服务器IIS上!
现在不是都在网bs上转吗,咋弄成cs了!
你可以学习下wcf,这是专门针对与分布式系统的!
ajaxtop 2011-09-14
  • 打赏
  • 举报
回复
这个比较严重,sevice当然放总部,分公司有多个,你只要对服务器端做一次部署都可用嘛
而且这个方式可以慎重,搞不好,性能,安全两个都没了,比较难控制,b/s多好

kebixiong111 2011-09-14
  • 打赏
  • 举报
回复
CSLA.NET 框架不知道如何
bluedoctor 2011-09-14
  • 打赏
  • 举报
回复
楼主有兴趣可以直接找我要邮件通信系统的源码,我们实现了远程更新客户局域网数据的功能。
kebixiong111 2011-09-14
  • 打赏
  • 举报
回复
米人了啊?
kebixiong111 2011-09-14
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 atgo 的回复:]
现成产品能轻松达到这效果。
[/Quote]

什么产品?
加载更多回复(2)

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧