高分求 [在多层结构的Winform中,如何才能把UI层不用布署在客户端?]

CtrlT 2007-11-02 10:51:51

数据传输用Remoting.

本人测试过:
1: 如在应用服务器端 new 出来一UI。传递到客户端是有问题的,关闭UI后应用服务器会报错,且客户端UI在new时会要取到客户端一些动态的东东.

2: 如在应用服务器端传个UI 的Type 到客户端,会提示无法找到引用,也就是dll,及其原数据....

所以在原理上来讲,这是行不通的。

哪位有好点的办法?

如有解决, 另开贴加188分。
...全文
166 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
gofficer 2007-11-07
  • 打赏
  • 举报
回复
另外一个办法:
把页面设置用参数形式作为配置表,以XML文件方式存放,UI有变化时更新XML文件,程序中通过XML文件的配置参数信息进行页面显示。
但是这样对XML文件内配置信息要求比较高,没有在配置表中的UI变化将无法更新。
hy_lihuan 2007-11-02
  • 打赏
  • 举报
回复
不太懂lz的描述,怎么说呢;winform的ui为什么要放在服务器上阿?而且能够放在服务器上吗?
在我的理解里面,winform程序应该都是部署在客户端的,只是什么会给客户看见,什么是看不见的;
服务器只提供数据以及一些服务,数据传输到客户端以后就由客户端来解决逻辑处理了;
北京的雾霾天 2007-11-02
  • 打赏
  • 举报
回复
按道理来说,应该在客户机上存在运行的UI,即使是B/S的结构,不也是有一个B(Browser)吗?

如果客户端只通过一个连接就打开程序,那么为了保证速度及安全等原因,一定会从服务器上传可以运行的程序到客户机上,并且一般来说会把这些可运行的程序留到客户机上以便下一次不用下载程序而直接运行来提高速度。
所以第一步就应该是下载程序到本机,程序下载到本地最后的效果和客户使用安装程序安装后的效果应该差不多了。如果说是不需要客户的部署就能运行,还得要用户按网址下载程序然后再安装或直接运行下载下来的程序。实际上用户还是进行了部署程序。
CtrlT 2007-11-02
  • 打赏
  • 举报
回复
自已UP!
CtrlT 2007-11-02
  • 打赏
  • 举报
回复

呵呵,看样子真的不容易...
CtrlT 2007-11-02
  • 打赏
  • 举报
回复

应该是很多个Form组成个dll, 成为多层架构中的表示层dll.

常规的做法是表示层dll随软件装在客户端, 而其它层,比如业务层,取数据层在应用服务器上运行。

而我们现已做到的是自动更新这个表示层dll,如楼上所说是定时检测更新的。

而我想要的是表示层dll不放在客户端. 我们对单个Form 的下载,更新.在客户端显示 ,

单个Form内容不会太大,这样保证传输速度,适当加上缓存.
就可成为即时更新,有如我们的浏览器跟网页的关系.

1: 如在应用服务器端 new 出来一Form. 传递到客户端是有问题的,关闭Form后应用服务器会报错,且客户端Form在new时会要取到客户端一些动态的东东.

2: 如在应用服务器端传个Form 的Type 到客户端,会提示无法找到引用,也就是dll,及其原数据....

所以在原理上来讲,这是有问题的。
ETstudio 2007-11-02
  • 打赏
  • 举报
回复
确实比较麻烦,基本了解你要做什么

你的想法是 所有的Form做成 dll 主程序调用这些dll,构成一个整体程序
当dll更新时,相当于病毒库更新,然后程序下载,重新运行

这样就方便C/S结构更新麻烦的问题

其实你现在已经实现了,就是不能实时更新

实时更新比较麻烦,因为要一直访问服务器是否有更新,所以你也看到杀毒软件都是定时更新,自己做的程序可以设置为启动时候更新
你写个webservices 提供更新查询,然后启动的时候就去更新相关的dll,至于是启动,还是每天,还是每小时运行一次检查就你自己控制了

实时更新我也没什么更好的方法
vwxyzh 2007-11-02
  • 打赏
  • 举报
回复
用Remoting去拿UI程序集的byte数组,再用AppDomain加载,就ok了
CtrlT 2007-11-02
  • 打赏
  • 举报
回复
把UI.dll下载到客户端。

---------------------------------------------------------------------------------------
Re: 现在我们的系统就是这样做的自动更新. 这样在运行某一界面时不好检测哪个界面该更新。而不是把整个dll下载。



ui层是运行在客户端的
所以楼主想法有问题
如果想动态改变,考虑使用clickonce
---------------------------------------------------------------------------------------
Re: 我的想法是有问题。

但假如能做到,就可以让我们的程序拥有C/S的强大,B/S的方便(只需装个简单的框架)。

应用服务端有更改马上能反应到客户端,而不用考虑头疼的自动更新dll.

真相重于对错 2007-11-02
  • 打赏
  • 举报
回复
ui层是运行在客户端的
所以楼主想法有问题
如果想动态改变,考虑使用clickonce
gofficer 2007-11-02
  • 打赏
  • 举报
回复
把UI.dll下载到客户端。
CtrlT 2007-11-02
  • 打赏
  • 举报
回复
也就是想解决现有Winform程序, UI界面是布署在客户端,

当我们的UI层修改后,就要重编译出dll. 要求客户端去下载这个dll文件更新.


如UI层是客户端运行时取得,自动更新就可免除.

如适当的加上缓存管理,那更好用。。。

CtrlT 2007-11-02
  • 打赏
  • 举报
回复
按道理来说,应该在客户机上存在运行的UI,即使是B/S的结构,不也是有一个B(Browser)吗?
Re: 我就是只需要一个瘦客户端。一个客户端运行时的UI层框架. 也就是貌似于B/S结构,但又有着C/S 结构的好处.


如果客户端只通过一个连接就打开程序,那么为了保证速度及安全等原因,一定会从服务器上传可以运行的程序到客户机上,并且一般来说会把这些可运行的程序留到客户机上以便下一次不用下载程序而直接运行来提高速度。

所以第一步就应该是下载程序到本机,程序下载到本地最后的效果和客户使用安装程序安装后的效果应该差不多了。如果说是不需要客户的部署就能运行,还得要用户按网址下载程序然后再安装或直接运行下载下来的程序。实际上用户还是进行了部署程序。

Re: 下载运行提高速度我也想过。但对于Winform程序而言它要的是个dll. 也就是我们现有程序已实现的dll文件的自动更新.

而我想要的是单个界面的UI能动态传到客户端去运行。

110,571

社区成员

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

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

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