随笔:7 文章:1 评论:60 引用:7
博客园 首页 发新随笔
发新文章 联系 订阅订阅管理

我的评论

re: ASP.NET AJAX 4.0 Preview 1 (已翻译) Scott.X.Liu 2008-07-22 10:51  
标识扩展,绑定,标准的xaml风格的东东~~~,也加进来了
哈哈,妙哉,楼主,这样添加绑定元素
elemens.Add(new MyBindingElement());
elemens.Add(new HttpTransportBindingElement());

在MyBinding.BuildChannelFactory()时,
先调用MyBindingElement.BuildChannelFactory()
生成,MyChannelFactory,在MyChannelFactory构造中,
再次,调用bindingContext的下一个绑定元素,即,HttpTransportBindingElement.BuildChannelFactory(),
这样
MyChannelFactory.InnerChannel实质就是封装了
HttpChannelFactory

同理. MyChannelListener.InnerChannelListener 就封装了HttpChannelListener


另外,HttpChannelListener 里面还用到了ChannelAcceptor<TChannel>子类,通过队列的添加,移除来实现,相当复杂~~~~~,如果要自已写一个监听器,估计会很吐血

楼主的第二个例子,Demo: 直接通过Binding进行通信简直是写出了最简化的内核版的wcf

在客户端自动生成的实例中

是从ClientBase<of T>.Channel属性开始的,最终要创建T的透明代理,然后调用。
以BasicHttpBinding为例,客户端请求的主要步骤如下:

1 根据传入的Binding和EndpointAddress生成ServiceEndpoint

2 再根据ServiceEndpoint的类型生成ServiceChannelFactory 类的实例
当前BasicHttpBinding 生成的应该是ServiceChannelFactoryOverRequest类的实例,
对应的IChannelBinder是RequestChannelBinder

注:
basicHttpBinding.BuildChannelFactory<IRequestChannel>要对 basicHttpBinding所有的绑定元素进行遍历
默认情况下,不启用https,则传输元素使用HttpTransportBindingElement,该对象重写BuildChannelFactory<IRequestChannel>,返回值是HttpChannelFactory

RequestChannelBinder对象最重要的字段是channel,对应的值是HttpChannelFactory.CreateChannel(),返回的值是HttpChannelFactory.HttpRequestChannel

3 生成ServiceChannel,将ServiceChannelFactoryOverRequest和RequestChannelBinder做为参数传入ServiceChannel
构造函数为ServiceChannel(ServiceChannelFactory factory, IChannelBinder binder)


4. 生成T的透理代理ServiceChannelProxy,将ServiceChannel做为参数传入ServiceChannelProxy,构造


5.在调用透明代理相应的方法时,调用ServiceChannelProxy.Invoke(),
如果是Service,调用ServiceChannel.Call(),此时实质是调用ServiceChannel封装的IChannelBinder(当前是RequestChannelBinder)的call,


6 调用RequestChannelBinder.Request(),注意步骤2最后一句,此时channel是HttpChannelFactory.HttpRequestChannel
HttpChannelFactory.HttpRequestChannel创建 HttpChannelRequest的请求,然后调用HttpChannelRequest.SendRequest发送消息
其实质就是封装一个HttpWebRequest,将Message发送到服务器端address里,根,webservice的最终原理是一样的


因此,要抓住几个关系点,从总体上把握客户端请求的流程
(1 ServiceChannelFactory 类的实例是什么类型
(2 IChannelBinder接口的实现是什么类型
(3 IChannelBinder.Channel是什么


re: 被人忽视的变化 System.Web.dll 2.0 (1) Scott.X.Liu 2008-01-19 17:04  
@隼笛
多谢提醒,因为一台机子里只能有一个版本,漏了2007年4月份的一个版本
Blog名:scott.x.liu
MSN: liuxu_wxy@hotmail.com
Email: liuxu_wxy@hotmail.com
QQ: 413784275
最感兴趣的研究方向:Asp.net ,web service,wcf
re: 欢迎加入ASP.NET Atlas学习团队! Scott.X.Liu 2008-01-19 01:34  
申请加入
ID: liuxu-wxy
msn: liuxu_wxy@hotmail.com
mail: liuxu_wxy@hotmail.com
您好,好久没上博客园了,突然发现徐州.net俱乐部又复活了,真不错~~~~
re: 申请加入博客园上海俱乐部 Scott.X.Liu 2007-09-09 11:21  
真实姓名:刘旭
博客园昵称:Scott.X.Liu
博客园Blog地址:http://liuxu-wxy.cnblogs.com/
工作单位:上海逸舟科技有限公司
职务:软件工程师
Gmail邮箱:liuxu.wxy@gmail.com
赵老大一语点破呀,扩展一下

ScriptManager.RegisterHiddenField方法分为二部分
1
Page.ClientScript.RegisterHiddenField是ajax为了扩展asp.net处理的

2.如果是异步时,
调用
ScriptRegistrationManager.RegisterHiddenFieldInternal()该方法会向ScriptRegistrationManager.ScriptHiddenFields赋值


------------------------------------------------------------
在PageRequestManager.ProcessScriptRegistration()时,会对
ScriptRegistration.RegisterHiddenFieldInternal注册的ScriptHiddenFields发送回客户端
如果是同步处理肯定没有问题

如果是放在UpdatePanel处理时,第一次Get请求,__COMPRESSEDVIEWSTATE被写入了Html页

当第二次您进行异步回调,在_OnFormSubmitCompleted回调时,Asp.net Ajax是不会对__COMPRESSEDVIEWSTATE这个东西的进行回填的,它只会处理_OnFormSubmitCompleted预定义的类型,所以异步处理时您提交的
__COMPRESSEDVIEWSTATE虽然有值,但使终是第一次Get请求的值,因此使用第一种方式序列化后的ViewState是没有对您有意义的值的,GridView就没法还原的.....

对于第二种方法需要二次序列化
因为最后一步persister.Save,.net会自动的把ControlState,ViewState,封装成Pair序列化,从性能上来说不来合算


CALENDER
<2008年7月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

公告

与我联系

常用链接

留言簿(5)

我参与的团队

随笔档案(7)

搜索

  •  

积分与排名

  • 积分 - 13345
  • 排名 - 2563

最新评论

阅读排行榜

评论排行榜


Powered By: 博客园
模板提供沪江博客