大家好,现请教一个问题甚盼回答,困扰好久了!
我是用.net 的Remoting:客户端调用服务器上的方法返回一个值。我在客户端是通过接口调用的,假定接口如下:
public interface IDispatcher
{
   string GetReportValue(string a);
  DataTable GetReportOrder(string plmeid, string reportTemplateName)
 } 具体实现我就不再这里写了,服务端也配置好了管道以及相关端口及协议,用的是Http。
我在客户端调用的时候是这样的:
IDispatcher idp = (IDispatcher)Activator.GetObject(typeof(IDispatcher), "http://localhost:8089/UnifiedReportService/xxx.soap");
 string str = idp.GetReportValue("Hello World");
 DataTable dt = idp.GetReportOrder(plmeid, templateName, UserSession);
结果第一个方法返回字符串的可以返回正确的值;而第二个方法由于在方法体内要用到许多的类,结果每运行到这里就提示"type xxxx  is not ed as serializable";问题是我用到的某些类有些是通过程序内部自定义的序列化操作转化成新的类了,这些新的类没有办法添加[Seriazble]的标志,我很纳闷为什么我返回的是DataTable ,却提示我要把服务器计算过程中遇到的类都序列化呢?
    我看到资料上说远程传递对象要么是序列化的,要么是继承于MarshalByRefObject的,但是假设我要传递类A,而类A用到了B,C,D,E这些类,难道这些类都要序列化么?
 搞了几天了没有进展,苦恼。
谢谢啊!

解决方案 »

  1.   

    但是在管道中传输的是类A啊,客户端通过远程调用来获得服务器上创建的类A,虽然类A用到的类B,C,D,E等,但是这个计算过程和创建过程都是在服务器上进行的,没有在管道中传输难道也序列化么?
      

  2.   

    我做了一个这样的实验:
    public interface IRemoteObject
    {
    int GetSum();
    }
    public classRemoteObject :System.MarshalByRefObject, TestRemoteObject.IRemoteObject
    {
    public int GetSum()
    {
    remotetwo = new RemoteTwo(100);
    return remotetwo.A;
    }
    这里A是类remotetwo的一个属性,通过构造函数赋值了。然后我在客户端这样调用:
    IRemoteObject mo = (IRemoteObject)Activator.GetObject(typeof(IRemoteObject), ConfigurationManager.AppSettings["HTTPChannel"]); 
    int i = mo.GetSum();
    返回了正确的值,但是remotetwo这个类并没有添加序列化的标志也可以啊。而我在论坛上发的那个程序却不可以,就是类A用到了类B,C,D,E,就提示BCDE都要序列化! 啥原因呢,感觉没有什么区别啊,谢谢