关于C/S模式的服务端,如何做?

ruhong1 2017-05-11 09:19:35
这几天试了一下三层结构,也试了一个IIS+WCF来实现其中的数据服务层,都没有问题。
现在我的问题是,通过IIS+WCF来读取数据,是没有问题了。
但是发布不是很方便,服务器上得有IIS,而且发布WCF感觉也不是很方便。
我看别人那些软件是,在作了一个winfrm挂在服务器作服务端,
那么这个服务端是如何与客户端来交换数据的?IIS+WCF,直接引用就能得到数据了。
自己作个服务端,如何和客户端交换数据?
...全文
448 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
夏天的枫 2017-05-11
  • 打赏
  • 举报
回复
引用 8 楼 ruhong1 的回复:
[quote=引用 4 楼 hjq624779687 的回复:] 用webservice不是很好弄吗,只用配置一次,代码里面做出更改,然后再右键工程,发布一直下一步就OK了,那样感觉更效率一些
我是想这样做的,就是有个安装包,基本上点安装就能把软件的服务端之类的都作好了。你让我再发布...这好象不是很专业的样子。[/quote] 。。。。。。这是要交给客户维护服务器的节奏了么
lwq222121 2017-05-11
  • 打赏
  • 举报
回复
httplistiner,自己实现一个类IIS的东西,我看你用IIS够,说明就是不用tcp长短链接那套就够了
isaac1011 2017-05-11
  • 打赏
  • 举报
回复
可寄宿在Windows service
ruhong1 2017-05-11
  • 打赏
  • 举报
回复
引用 4 楼 hjq624779687 的回复:
用webservice不是很好弄吗,只用配置一次,代码里面做出更改,然后再右键工程,发布一直下一步就OK了,那样感觉更效率一些
我是想这样做的,就是有个安装包,基本上点安装就能把软件的服务端之类的都作好了。你让我再发布...这好象不是很专业的样子。
ruhong1 2017-05-11
  • 打赏
  • 举报
回复
谢谢各位老大,我研究研究。
  • 打赏
  • 举报
回复
引用 4 楼 hjq624779687 的回复:
用webservice不是很好弄吗,只用配置一次,代码里面做出更改,然后再右键工程,发布一直下一步就OK了,那样感觉更效率一些
LZ 不打算依赖 IIS 了。
  • 打赏
  • 举报
回复
svr.Send("{序号: 1234, 命令类型:\"ABC.Comm1\", 命令体: { Name: \"asfa\", Quanlity: 50}}");
短链接中选择 http 还是 tcp,主要考虑性能问题(通常我们不考虑 WCF,而只考虑基本的 http post 方式)。而当双向通讯很重要时,就不仅仅是性能问题了,还有持续地连接、避免三次握手、服务器端主动 push 信息的需求,此时就要选择长连接方式。 不可选错。如果你曾经用过长连接方式,那么基本上你会一直选择长连接方式。这就好像初学者总是选择短连接一样,因为课堂上老师只会用短链接写个例子,于是学生就按照笔记来认识是非问题(实际上并没有绝对不变的是非问题)。
夏天的枫 2017-05-11
  • 打赏
  • 举报
回复
用webservice不是很好弄吗,只用配置一次,代码里面做出更改,然后再右键工程,发布一直下一步就OK了,那样感觉更效率一些
  • 打赏
  • 举报
回复
当你使用 windows service 或者 控制台 程序来承载 WCF 服务,那么你的原来的 asp.net 代码要稍微修改一下。因为此时 asp.net 没用了,要改为类库代码。 如果你的应用将来要完成比较频繁的通讯,特别是存在双向通讯的需求,应该使用 tcp 服务或者 websocket 服务方式。封装一下自己的命令为 json 形式只要写几十行通用代码,因此其实用不着 WCF 那类封装的机制,自己写一个轻量级的更好。 你提到了“三层结构”。其实三层结构很容易理解,就是在网络系统设计时,终端的应用不要用什么“增删改查”得思路来理解后台数据,不需要知道后台有没有数据库、用了几个数据库、还有别的什么 SOA 服务,而只要调用你的服务器端公开的的少数几个 BLL 业务接口命令,这就是三层结构。有些过分包装的东西,号称“三层结构”,只会给后期的扩展和维护增加痛苦、冗余,并没有好处。 通讯本身的意思其实很简单。比如说假设我客户端写代码
svr.Send("{序号: 1234, 命令类型:\"ABC.Comm1", 命令体: { Name: \"asfa\", Quanlity: 50}}");
这就把地1234号命令发给了对方,此命令的类型是 ABC.Comm1,要求对方用这个类型名称将命令体中的 json 对象反序列化为 Comm1 对象实例,然后执行其命令操作。 收到的信息时也是一样,可以从命令序号中知道是多少号命令的返回结果,可以知道返回来的对象的 json 序列化结果,反序列化为实体对象就能作为过去发送的一个命令的返回值了。 所以你为“客户端如何与服务器断交换数据的?”,其实这里可以不用什么复杂的输入输出参数解析机制,不用 WCF 之类的,你自己收发字符串然后写上(通用的)4、5行 json 序列化、反序列化代码即可。
  • 打赏
  • 举报
回复
WCF不仅仅承载在 asp.net 网站,在控制台程序、windows servervice程序、winform 和 wpf 程序,都可以承载。你可以查相关资料。 一般来说,windows service 承载 tcp、http(使用 HttpListener)、WebSocket、MSMQ、SMTP 服务之类的,更轻或者更方便。windows service 服务应用就是纯粹的 windows 服务,不像 asp.net 网站还得通过 IIS 服务。
shoppo0505 2017-05-11
  • 打赏
  • 举报
回复
webservice
正怒月神 2017-05-11
  • 打赏
  • 举报
回复
你说的 winfrm挂在服务器作服务端 应该是 wcf的宿主吧。 你完全可以使用 webservice或者 webapi来解决,比较快速。

110,571

社区成员

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

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

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