分布式的操作,之前的努力包括:
1. 基于ws的neobe,实现远程访问数据库,从而实现了数据库的分布式操作。
问题:权限问题,由于数据库操作几乎全部都包括,如果帐号泄露,会导致其他数据被修改。
2. 重写handler,通过codelive制作了很多的handler
问题:非常不通用。每一个模块一个handler。乱七八糟。而且都使用了connecton去操作,性能一般般。
现在要解决的是,通过一定的标签暴露出来调用方法,直接调用。
思路:
和web service类似,
public interface IRemotingFactory
{
[RemoteCall]
IMessage CreateMessage(string name, byte[] img);
}
这样就暴露出来了方法。
框架使用httpHandler.当查询制定模块的接口,例如
http://www.pixysoft.net/remoting.asmx?module=Pixysoft
这样,就反射Pixysoft对应代表的模块,获取里面标注了Remote的类接口,然后返回参数列表。 例如:
就是把接口描述一次。
如果请求带有了参数,则处理实际的调用。
一个请求包括了:
1. 调用对象的描述。
Assembly=xxx, ClassName = xxx, Method=xxx,Parameter =xxx,Return = xxx
2. 传入参数。
Parameter.Value = xxxx
请求返回,包括了类型描述,返回值,例如:
Assembly=xxx Type=xxx
Value=xxxxx
交互中,使用了代理技术,让本地的操作转变为远程调用。一个类似的操作:
IRemoteFactory factory = RemoteManager.Create<IRemoteFactory>();
factory.CreateMessage(xxx,xxx);
框架意义:
1. 实现本地调用服务器操作,例如考勤系统。我只要实现一个上传考勤信息,
Attend(string cardno, byte[] photo);
这样,服务器数据库就获取了对应的信息。网站可以直接查询。
2. 网站之间互联
对现有的框架可以再次简化。例如sso操作中的服务器登录验证,直接使用remoting即可。不需要再写handler等。
3. 分布式的应用。
例如一个互联框架,可以简化相互数据调用传递过程。
开始时间 2010-04-11,结束时间2010-04-12