文档介绍:C#.NET编程技术
第12讲 .NET远程通信
内容提要
通信模型概述
套接字通信编程
面向对象的通信
.NET Remoting基本原理
.NET Remoting通信编程
通信模型概述
什么是通信?
两个或多求的业务工作,而只是一些潜在的背景知识和底层架构
内容提要
通信模型概述
套接字通信编程
面向对象的通信
.NET Remoting基本原理
.NET Remoting通信编程
面向对象的通信
.NET是面向对象的语言
而使用socket的通信,传递的是无格式数据
能否在通信中传递对象?
通信中传递对象的好处:
与面向对象编程风格保持一致,无需关注通信中的数据流格式及数据传递的完整性;
与常规编程方式一样使用对象,不关心底层如何通信的,从而集中全部精力在业务功能上。
从编程角度看通信的实质
从编程的角度看,什么是通信?
所谓通信,就是函数调用。
// 侦听到来的连接
();
// 接受连接到一个新的套接字
Socket sAccept = ();
// 使用新的套接字接收和发送数据
byte[] data = {1, 2, 3, 4};
(data);
byte[] rcvData = new byte[5];
(rcvData);
发送数据,就是调用一个函数(Send)并把要发送的数据(data)作为形参传入。
接收数据,就是调用一个函数(Receive)并把要存储收到数据的缓冲区作为形参传入。
基于socket通信的示意图
Socket
通信对象:
通信函数:
信道
Socket
字节数据
从编程角度看通信的实质(续)
在基于socket的通信中,
被调用的函数都是固定类型(Socket/TcpClient/WebRequest等)的方法
传递的数据则是无格式的连续字节
数据的传入和接收都是使用函数形参
发送和接收使用不同的函数
那么,是否可以……
以任意类型的方法作为通信函数?
传递的数据能否是有意义的对象?
以函数返回值的方式返回数据?
发送端、接收端的函数,能否是同一个?
面向对象通信的示意图
MyObject
Resonse (Request req)
通信对象:
通信函数:
信道
MyObject
Resonse (Request req)
任意对象作为通信对象
传递的数据是有意义的(一个Request类型对象)
以函数返回值的方式返回数据(一个Response类型对象)
MyObject obj = new MyObject();
Request req = new Request(…);
Response res = (req);
这样的通信,怎样编程?
这与平常的编程没有任何区别,根本看不出通信的存在!
发送和接收函数,是同一个(ExecReq)
面向对象通信
面向对象通信与面向对象本地编程,在代码上完全一样。
二者区别在于:
参数传到了本地,还是传到了远程机器
函数的执行,是在本地还是在远程机器
面向对象通信编程:
看起来像是调用了个本地函数,就得到了结果;
实际上参数是传递到了远程机器上,而函数也是在远程机器上执行的。
面向对象通信的几个要点
信道
数据通过什么信道传递的(TCP/HTTP/IPC…)
通信对象
通信双方使用的通信对象是什么
在socket通信中,socket标识通信端点;而在面向对象通信中,端点是任何对象,我们叫做通信对象
封装格式
面向对象通信传递的是对象,而各类信道只能传递无格式的字节串或文本,那么如何将对象封装成字节串或文本,且不丢失对象本身的信息
.
.NET Remoting
“信道”可使用HTTP/TCP/IPC,也可以自定义
可以用Binary/XML/SOAP封装通信中的对象
Web Services
与平台无关的通信模型,兼容性好
“信道”只能使用HTTP
只能用SOAP封装通信中的对象
Windows Communication Foundation (WCF)
., Remoting/Web Services/MSMQ等多种通信方式
后两种通信模型,
内容提要
通信模型概述
套接字通信编程
面向对象的通信
.NET Remo