专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > WCF

十五天精通WCF——第八天 对“绑定”的最后1点理解

发布时间:2011-06-23 13:51:13 文章来源:www.iduyao.cn 采编人员:星星草
十五天精通WCF——第八天 对“绑定”的最后一点理解

  

  转眼已经中断10几天没有写博客了,也不是工作太忙,正好碰到了端午节,然后最近看天津台的爱情保卫战入迷了。。。太好看了,一直都是回味无穷。。。而且

涂磊老师话说的真是tmd的经典,然后就这样耽搁了,好了,话不多说,这篇我们看看binding中最后一点需要知道的东西。

 

一:信道栈

  我在之前的文章中多次提到信道栈,不知道大家对它的概念是否有了解,其实想想也还是蛮简单的,既然是栈,那么这个栈肯定就不止一个元素了,对吧,第二个

的话,既然是栈,那么肯定就遵循FILO的原则,可能你会说,这个还是蛮抽象的,能给个具体的例子么???恭喜你,wcf中还真有一个方法CreateBindingElements,

下面我们具体看看。。。

 

1.  简单看看各种binding的栈中都有些什么

  

看到上面的监控窗口,是不是有点意思,在BasicHttpBinding的信道栈中有两个元素,分别是HttpTransportBindingElement和TextMessageEncodingBindingEl

ement,通过名字也能很容易的判断出来,一个是“http传输协议”,一个是“文本消息编码协议”,然后再看看复杂一点的WSHttpBinding,你会发现,他不光有Basic

的所有东西,还包括SymmetricSecurityBindingElement(安全协议) 和 TransactionFlowBindingElement(事务流),现在你心中是不是有底了,起码我知道各

种Binding里面都有些啥,为了更好的理解,我来画一张简图。

上面这个图,大概也就表达了我的意思,当我们Client在走WSHttpBinding这个协议的时候,Client端的InputMessage会先走 TransactionFlow,SymmetricSec

urity,TextMessageEncoding,最后走HttpTransport,然后Service端就按照客户端进行“反向处理”,通过一阵禁脔之后,我们就拿到了安全的OutputMessage。

 

二:BindingElement的跨绑定性

  你要是很仔细的话,你肯定会发现,其实Binding就是一个预先默认配置好的信道栈,对不对,你也看到了,每一种Binding都有属于自己的BindingElements,

恰恰这些Elements是可以跨Binding的,也就是说我可以自由组合Elements,这样是不是可以给我们这些寒酸的码农最大的灵活性,对吧,举个简单的例子,

BasicHttpBinding有两个绑定元素,其中对soap消息进行的是TextMessageEncoding编码对吧,而netTcpBinding对soap进行的BinaryMessageEncoding,

然后你也应该知道了,我想做一个自定义的Binding,其中消息编码是BinaryMessage,传输协议是HttpTransport,那怎么做呢????

Host文件:

 1     class Program1
 2     {
 3         static void Main(string[] args)
 4         {
 5             ServiceHost host = new ServiceHost(typeof(HomeService), new Uri("http://192.168.1.105:1920"));
 6 
 7             var customBinding = new CustomBinding();
 8 
 9             customBinding.Elements.Add(new BinaryMessageEncodingBindingElement());
10             customBinding.Elements.Add(new HttpTransportBindingElement());
11 
12             host.AddServiceEndpoint(typeof(IHomeService), customBinding, "HomeServie");
13 
14             host.Description.Behaviors.Add(new ServiceMetadataBehavior() { HttpGetEnabled = true });
15 
16             host.AddServiceEndpoint(typeof(IMetadataExchange), MetadataExchangeBindings.CreateMexHttpBinding(), "mex");
17 
18             host.Open();
19 
20             Console.WriteLine("服务已经开启!!!");
21 
22             Console.Read();
23         }
24     }

 

Client调用:

 1     static void Main(string[] args)
 2         {
 3             ServiceReference1.HomeServiceClient client = new ServiceReference1.HomeServiceClient();
 4 
 5             var result = client.Update("你好");
 6 
 7             Console.WriteLine("server value:" + result);
 8 
 9             Console.Read();
10         }

最后我们用Fiddler监视一下,最后我们看看,都是些乱码。

 

这篇就说到这里了,希望对你有帮助,下一篇我们看看WCF中的Behavior,很好玩的哦~~~

 

4楼garfieldzf
一线也是携程的?
3楼茗::流
简单就是美
2楼btq
通俗易懂,求更新
1楼丁码农
一线的文章总是那么通俗易懂
Re: 一线码农
@丁码农,感觉支持,早点睡吧~~
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: