日志 20071207(CAB,Data Transfer in WCF)
![](/Images/OutliningIndicators/None.gif)
2
![](/Images/OutliningIndicators/None.gif)
3
![](/Images/OutliningIndicators/None.gif)
4
![](/Images/OutliningIndicators/None.gif)
5
![](/Images/OutliningIndicators/None.gif)
6
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
7
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
8
![](/Images/OutliningIndicators/InBlock.gif)
9
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
10
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![](/Images/OutliningIndicators/None.gif)
2
![](/Images/OutliningIndicators/None.gif)
3
![](/Images/OutliningIndicators/None.gif)
4
![](/Images/OutliningIndicators/None.gif)
5
![](/Images/OutliningIndicators/None.gif)
6
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
7
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
8
![](/Images/OutliningIndicators/InBlock.gif)
9
![](/Images/OutliningIndicators/InBlock.gif)
10
![](/Images/OutliningIndicators/InBlock.gif)
11
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
12
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
13
![](/Images/OutliningIndicators/None.gif)
14
![](/Images/OutliningIndicators/None.gif)
15
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
16
![](/Images/OutliningIndicators/InBlock.gif)
17
![](/Images/OutliningIndicators/InBlock.gif)
18
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
19
![](/Images/OutliningIndicators/InBlock.gif)
20
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
21
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
2.对于大文件的传输,现在脑子里有几个基本的概念:
(1)要用Streamed的方式,不要用Buffered的方式
(2)要使用二进制格式的原生信息,不要使用Base64进行信息的文本化处理
(3)WCF本身考虑的是怎么对信息作编码,通过什么样的协议传过来。但续传本身的一些功能(比如把已经传过来的内容先一部分得保存起来等)可能需要自己去考虑它的实现方式。
3.如果使用MTOM作为一个binding的Encode方式,如代码段3:
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
4.使用Streamed的方式去发送消息,有几个明显的限制:
(1)无法对消息体进行签名。这是当然的,因为内存里不再缓存整个消息了。
(2)由于无法签名,所以一些依赖于签名的加密手段就不能使用了。
(3)难以支持整个消息的重发,因而也就无法保证一个可靠的连接(reliable session)
正因为有这些限制,所以WCF中的很多默认的Binding是不支持这种Streamed的方式的,只有下面三种绑定可以:BasicHttpBinding, NetTcpBinding, NetNamedPipeBinding。
5.对于TransferMode这个枚举值,第一次在MSDN的时候可是把俺为难坏了,啃了半天英文也没搞清楚到底哪种环境适合用什么,直到后来看到代码段5例子(我已添加注释):
![](/Images/OutliningIndicators/None.gif)
2
![](/Images/OutliningIndicators/None.gif)
3
![](/Images/OutliningIndicators/None.gif)
4
![](/Images/OutliningIndicators/None.gif)
5
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
6
![](/Images/OutliningIndicators/InBlock.gif)
7
![](/Images/OutliningIndicators/InBlock.gif)
8
![](/Images/OutliningIndicators/InBlock.gif)
9
![](/Images/OutliningIndicators/InBlock.gif)
10
![](/Images/OutliningIndicators/InBlock.gif)
11
![](/Images/OutliningIndicators/InBlock.gif)
12
![](/Images/OutliningIndicators/InBlock.gif)
13
![](/Images/OutliningIndicators/InBlock.gif)
14
![](/Images/OutliningIndicators/InBlock.gif)
15
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
16
![](/Images/OutliningIndicators/None.gif)
17
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
18
![](/Images/OutliningIndicators/InBlock.gif)
19
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
另外,这也纠正了我以前的一个误区。我以前认为ServiceContract和Binding是一一对应的,或者说,我认为如代码段6这样的配置中的contract属性只能指向一个ServiceContract,看来我是错的(还需以后的验证)。
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
6.自己到目前为止,在开发中还没有用过DataContract和MessageContrace,说明自己对WCF的理解和使用都非常片面,有很大局限性。
7.刚才在MS Downloader里面下载了一些关于WCF的Samples,觉得不错。但自己对高级查询中的一些查询项还是摸不太清头脑,不晓得Product/Technology和Category这两个关键的查询选项到底应该怎么设,只要统统暂设成All。
地址:http://www.microsoft.com/downloads/advancedsearch.aspx?displaylang=en
8.看了一个关于MessageContract的最简单的例子,就是定义一个[MessageContract]的类型,并在其中定义[MessageHeader]和[MessaegBodyMember]。然后这个类型就可以作为一个WCF服务的调用参数类型和返回参数类型了。
下班了,下周继续 ^&^