WebServer重写:提建议者给分
今天终于把WebServer重写写了;并且做一下简单性能与数据传送稳定性测试;
我重写WebServer的原因有以下几个:
1、不支持服务器事件(服务器不能望客户端主动发消息)
2、调WebServer方法不方便(必须进行WebServer引用;WebServer引用的目的就是生成一些客户端代码)
3、不能发送对象(不是完全不能;是不方便)
4、必须与IIS集成
5、服务端维护不方便
6、所有服务的调用都是PUBLIC的,不能进行权限控制(在方法内可以实现)
以上问题我已经解决了
1、用异步实现服务器事件
2、使用简单唯一接口调用;我实现了一个名字为POST的唯一接口;定义如下:
Public Function POST(ByVal MethodFullPath As String, ByVal MethodName As String, ByVal Parameters() As Object, ByRef ReturnValue As Object) As Boolean
MethodFullPath:方法的相对虚拟路径如:system/user
MethodName: 方法名称如:Login
Parameters() : 参数数组;能自动识别参数的类型;能自动把非简单类型进行序列化
ReturnValue :返回值
3、使用序列化实现对象的发送与接收
4、使用HttpWebRequest:HttpWebResponse:HttpListener来实现服务器与客户端的通讯;并且完全兼容IIS;也就是说服务器端可以用HttpListener服务来做服务器;也可以用IIS做服务器;能够完全的嵌入ASP.Net中;单独实现了HttpWebRequest:HttpWebResponse:HttpListener;因为HttpWebRequest:HttpWebResponse:HttpListener在windows XP SP2 或windosw 2003 SP1前不能使用
5、服务器上的所有方法都使用插件模式;在不需要修改主程序的情况下任意修改加减类、方法
6、所有服务进行统一管理;设置权限。
性能与数据传送稳定性测试:
1、从服务器上提取一个表:30个字段、6万条数据共计45M;10秒搞定
2、把从服务器上提起的表发送到服务器;再返回来;40秒
3、从服务器上提取一个表:30个字段、1000条数据,2秒搞定
请大家拍拍板砖
问题点数:100、回复次数:36Top
1 楼kokubo_wing(假装父母富裕是违法行为)回复于 2006-05-16 10:05:41 得分 5
沙发,帮顶Top
2 楼zlkingdom(风之悲伤)回复于 2006-05-16 10:12:12 得分 5
写的已经很不错了,呵呵,真没什么好建议的了Top
3 楼cowbird()回复于 2006-05-16 10:13:50 得分 5
强Top
4 楼cobrastudio(老汉我)回复于 2006-05-16 10:15:56 得分 5
友情UP、Top
5 楼viena(维也纳N02)回复于 2006-05-16 10:16:38 得分 5
你自己重写的?走召弓虽!葱白~Top
6 楼我一直在寻找()回复于 2006-05-16 10:16:55 得分 0
对了还忘了一条:
7、方法的异常返回不方便;
解决
7、把插件中的异常进行序列化;返回到客户端。Top
7 楼我一直在寻找()回复于 2006-05-16 10:21:23 得分 0
RE:viena(EQ<0) ( )
跟您解释一下:是用的.Net 2.0框架进行重写的。
过几天我开一个服务器;大家帮忙、测试测试。谢谢关注。Top
8 楼Ivony(授人以鱼不如授人以渔,上海谋生)回复于 2006-05-16 10:33:26 得分 5
WebServer?WebService?WebService Server?Top
9 楼chendazhi(不务正业)回复于 2006-05-16 10:34:40 得分 5
超牛B!
关注..........
Top
10 楼我一直在寻找()回复于 2006-05-16 10:38:06 得分 0
不好意思:写错了:
是重新实现了WebService
并且能方便的使用WebService Server(自认为方便;见笑了)
Top
11 楼Ivony(授人以鱼不如授人以渔,上海谋生)回复于 2006-05-16 10:42:55 得分 5
感觉上WebService就是用SOAP这种傻瓜协议实现远程调用,可以直观的添加引用,并像调用本地方法一样的调用远程方法是他的优势,有复杂一些的应用偶就不考虑WebService了。Top
12 楼我一直在寻找()回复于 2006-05-16 10:54:53 得分 0
SOAP这种协议是比较简单;我个人感觉简单的东西有他的好处;稳定,操作方便,有这些就足够有理由来使用他了。
“有复杂一些的应用偶就不考虑WebService了”对您的这个说法我不同意;现在的SOA大家都知道吧;应该是未来的主要方向吧,他用的就是WebService。并且IBM,SUN,HP等大公司都用它来做SOA,应该不像你说的这样不好用;
请问Ivony() :您讲的复杂一些的应用大概都是一些什么应用,能讲来听听吗。Top
13 楼Ivony(授人以鱼不如授人以渔,上海谋生)回复于 2006-05-16 11:09:23 得分 5
复杂的应用是指要求复杂而不是数据复杂,数据复杂的应用反而WebService更合适。
例如高安全性(远程登录),高并发数(一分钟上万个请求)。Top
14 楼我一直在寻找()回复于 2006-05-16 11:19:00 得分 0
那就对了;我的目标就是实现数据复杂的应用;
对WebService谈“高安全性(远程登录),高并发数”就好比对步枪谈怎么打飞机。
因为HTTP协议的安全性、效率本来就不是特高,在它上面实现的WebService的安全性与HTTP是处在同一级别的;而效率一定低于HTTP。
谢谢关注。Top
15 楼asurasa70(暴风)回复于 2006-05-16 11:24:33 得分 5
WebService的返回值有的时候真的很浪费,如果返回值(比如返回1或0)非常简单的话不如直接用response.writeTop
16 楼我一直在寻找()回复于 2006-05-16 11:29:16 得分 0
您说的没错:但是有时候为了编程的统一性以及规范性我们就不得不用WebService了,但是我曾经测试过;1024个字符与1个字符发送的速度基本一样;跟硬件的特点有关;1024个字符基本能满足SOAP协议。
谢谢关注。
Top
17 楼qfkfw(空军一号)回复于 2006-05-16 11:35:49 得分 5
厉害
Top
18 楼我一直在寻找()回复于 2006-05-16 19:54:30 得分 0
那位大侠还能点什么建议。先谢了。Top
19 楼SiteManage(SiteManage)回复于 2006-05-17 00:47:23 得分 5
想象一下WS的调用步骤:
请求是Soap协议, 一个xml文件(就是你的方法里入参)
Soap协议里面有什么东西呢?
1. 请求的URL地址, 对应于你的 MethodFullPath
2. SoapAction 对应于你的 MethodName
3. SoapMessage 对应于你的 Parameters
微软是怎么将soap的xml转换为对象的呢? 是用XmlSerializer
微软怎么在IIS中处理这个请求的呢? 是一个叫做 WebServiceHandlerFactory, 其中会返回一个叫做 WebServiceHandler的对象, 实现了IHttpHandler
所以你所做的事, 其实是在重新发明轮子(很抱歉, 不是故意打击你), 这个轮子经过你的修改之后, 要执行两次序列化/反序列化
下面的两个事情, 也许对你有用:
1. 请你试着在WebService的方法调用中, 捕获到原始的Soap消息, 这个是客户端请求所发出的一个xml文件, 看看你能做些什么.
2. 微软有一篇文章, 叫做 不用IIS实现WebService, 你可以在MSDN网站中找到, 是中文的
Top
20 楼我一直在寻找()回复于 2006-05-17 13:46:54 得分 0
谢谢SiteManage(SiteManage) 的评论:
我承认微软的Webserver服务写的特别方便;我是使用过一段时间感觉不是特灵活;微软的Webserver是挺方便的。
我一个月前就捕获到原始的Soap消息了,我的SOAP消息跟他的是一样;并且我还反汇编了WebService以及SOAP协议的实现,我发现不管我怎么样都得不到我想要的东西;因为许多我需要的东西他都是friend的我不能得到; 微软的“不用IIS实现WebService”我已经仔细研究过了;他的前提是必须是XPSP2或者Server2003SP1以上;再说用HttpListener来实现他在本质上与IIS没有大的区别;我有点不太明白;微软的SOAP协议我看过了他也是在服务器端用XmlSerializer序列化,然后在客户端进行反序列化,我也是;您说的“要执行两次序列化/反序列化”我怎么就没有发现呢。
我重写他的开始的原因是他不能主动发送消息;更不能吧一个客户端的消息发送到另外一个客户端去;(比如有人下了一个订单,能查看订单的人立刻就能收到,而不需要自己去查询,订单处理完成后管生产的立刻能收到订单。)
请问SiteManage(SiteManage)我上面说的在微软的WebService中能实现吗;可能是我比较浮浅请您赐教。
另外:WebService访问权限怎么控制(不在方法中进行权限检查)
还有:在非XPSP2或者Server2003SP1上并且没有IIS的情况下怎么实WEBService.
Top
21 楼zhaochunyu0104(春雨)回复于 2006-05-17 18:42:24 得分 5
关注 markTop
22 楼RUN_(奔跑)回复于 2006-05-18 10:37:37 得分 5
牛就一个字Top
23 楼copico(北北)回复于 2006-05-18 10:39:54 得分 5
可以注册中文名了?Top
24 楼hotact(袋鼠)回复于 2006-05-18 11:26:11 得分 5
高手,是否能分享代码。
另外既然是webservice,那你怎么控制安全性,以防别人知道了接口胡乱调用。Top
25 楼我一直在寻找()回复于 2006-05-18 22:55:04 得分 0
谢谢大家关注:
分享代码暂时可能性不大;但是过段时间等测试完成后我可以免费提供给大家使用。
其实我对WebServices重写只是我一个框架中一个模块;等我的框架全部完成后100%定可以免费提供给大家使用。我的框架是想申请风险投资的,所以不能跟大家分享代码,请大家原谅,以后提供大家使用时发现BUG或者提出功能需求可以终身得到我们的免费电话技术支持。
对于框架我以后会慢慢的告诉大家,我发布本贴的目的是想看看我的东西到底怎么样,
RE:copico(一路向北)
我的号是在2001年注册的;现在不能注册中文名了。Top
26 楼gameboy766(古巴)回复于 2006-05-19 08:36:55 得分 5
高手Top
27 楼GXY2005(民工甲:杀富济贫,打土豪分田地)回复于 2006-05-19 09:25:59 得分 5
1、不支持服务器事件(服务器不能望客户端主动发消息)
----------------------------------------
我想知道这个问题的解决办法,能否提示下??Top
28 楼GXY2005(民工甲:杀富济贫,打土豪分田地)回复于 2006-05-19 09:31:34 得分 5
1、用异步实现服务器事件
不懂,请不吝赐教,谢谢!Top
29 楼我一直在寻找()回复于 2006-05-19 09:33:20 得分 0
连接别关闭;也就是HTTP连接一直是开的;有事件时直接向客户端Write.
好像在微软的WebService中执行完一个服务后连接是关闭的.Top
30 楼我一直在寻找()回复于 2006-05-19 09:36:58 得分 0
TO:GXY2005(不好!我看見豬在天上飛)
好像在微软的框架中没有客户端管理;就算你有消息也不知道发给谁,(可能能够,是我不知道)Top
31 楼我一直在寻找()回复于 2006-05-19 09:42:07 得分 0
在我将要做的框架中有单独客户端管理;也有单独的事件管理;并且客户端是分组的;这样我只要把我想发送的事件给事件管理管理器就可以了.Top
32 楼Zine_Alone(☆小飞☆)回复于 2006-05-20 21:53:54 得分 5
不错了,上次用JAVA写个WEBSERVICE JDBC连AS400 的DB2数据库 再用.NET这边调用,慢得要死了,一不小心就超时~~~不知是驱动问题还是什么~. 100 W级数据.Top
33 楼我一直在寻找()回复于 2006-05-20 23:12:29 得分 0
to:Zine_Alone(一个人的日子)
100 W数据我感觉应该分页传比较稳定点。Top
34 楼duxianghe( dux++ )回复于 2006-06-24 22:23:19 得分 0
楼主开个空间单独讨论吧,很有意义Top
35 楼duxianghe( dux++ )回复于 2006-06-24 22:24:36 得分 0
楼主有自己的论坛没有?
我很感兴趣Top
36 楼AdonisVB(Adonis)回复于 2007-01-19 23:48:17 得分 0
WWF(Microsoft Windows Workflow Foundation)中文社区:http://www.wwfcn.netTop




