最近忙得一蹋糊涂,作UAP开发平台,总是觉得这样的日子好像没有尽头似的!
在开发的时候,发现了.net remoting的一个Bug(暂且这样称呼,也许是我自己的错误),采用Remoting分布式开发,其中的服务组件有一个方法:
public Entity[] GetEntityInfo( 参数..... );
其中的Entity是自己定义的一个实体类,当使用HttpChannel+Soap通信格式的时候,总是在方法执行完毕返回的过程中,通道Soap序列化的时候抛出一个错误,但是另外一个方法: public Entity GetEntityInfoByID( string id )确没有任何问题,开始的时候我怀疑是Entity类的问题,于是我构建了另外一个类,仅仅名字与Entity不一样,其实现代码全部拷贝Entity 类,用同样的方法确没有任何问题,于是我怀疑是不是所有的名为Entity的类在该情况下都不受支持,为了验证我的想法,我新建了一个Demo工程,模拟整个实现过程,其中一些代码如下所示:
public class MyService : MarshalbyRefobject
{
public Entity[] GetEntities( )
{
return new Entity[]{ new Entity() , new Entity()};
}
public Entity GetEntityByID( string id )
{
return new Entity();
}
}
[Serializable]
public class Entity
{
private string _name;
public string Name
{
get
{
return _name;
}
set
{
_name = value;
}
}
public Entity( )
{
}
}
果然执行GetEntities这个方法的时候,抛出了同样的错误,但是GetEntityByID确没有任何问题。
看来HttpChannel+Soap对凡是名为“Entity”的类执行序列化的时候“敏感”,它出现在下面的条件下:
1、可序列化的类名为“Entity”
2、服务类的方法返回Entity数组
3、HttpChannel + Soap