小弟最近用remoting部署一个三层的程序。
前端还是用应用程序,中间层通过做一个service部署在另一个服务器上。
现碰到以下几个问题,请大家指明一条出路吧!
1。在序列化xmldocument的时候,在s端必须先存成一个文件然后在c端读取吗?有没可以直接传过来的方式?
现使用的方式如下:
                           XmlDocument m_xmlDoc;
m_xmlDoc = new XmlDocument();
m_xmlDoc.Load(CS_ACCESSRIGHTSXML); XmlSerializer ser = new XmlSerializer(typeof(XmlDocument)); TextWriter writer = new StreamWriter("C:\\aa.xml");
ser.Serialize(writer, m_xmlDoc);
writer.Close();
2。小弟通过配置文件来配置通道信息和一些remoting信息。
配置文件如下:C:
</configuration>
<system.runtime.remoting>
    <application>      <client>
      
<!-- This entry only works with the RemotingHelper class -->
        <wellknown type="Price.BusinessFacade.PriceSystem, Price.BusinessFacade"  
                   url="tcp://localhost:1234/PGLPMS.rem" />
      </client>    </application>
  </system.runtime.remoting>
</configuration>
S:
<configuration>
  <system.runtime.remoting>
    <application>
      <channels>
        <channel ref="tcp" port="1234" />
      </channels>
      <service>
        <wellknown mode="SingleCall" type="Price.BusinessFacade.PriceSystem, Price.BusinessFacade" objectUri="PGLPMS.rem" />
      </service>
    </application>
  </system.runtime.remoting>
</configuration>
现请问是不是在配置文件里面需要添加要序列化的类?和对象?如果是?如何实现?
3。现碰见一个问题当建立好通道,传了数据后。
如果client端关闭,再打开的时候报远程处理配置出错。remoting.exception.
试图重定向类型Price.BusinessFacade.PriceSystem,Price.BusinessFacade的激活,而该类型已重定向?
调试发现执行到RemotingConfiguration.Configure(filename)出错;
请问是什么原因?如何修改?
4。关于remoting的架构,小弟看了好多remoting的简单例子,发现都公布接口的方式来实现。
而小弟目前都没有接口的方式来实现。请问这会有什么好处。谢谢大家的帮助。

解决方案 »

  1.   

    5.另外还有一个问题。sao和cao.一个是客户端激活,一个是服务端激活。小弟理解还不深刻,只是简单的觉得sao,是不是在c端发送一个引用 用Activator.GetObject来激活,
    而s端的请问又是什么呢??
    可有什么例子加深理解?
    [email protected]
    万分感谢!!!
      

  2.   

    问题1: 可以把xml文档通过string类型用接口返回给客户端呀。
    问题2: 客户端不用什么app.config,用Activator.GetObject直接调用接口就行了。
    问题3: 在客户度不用在app.config中配置数据,用Activator.GetObject调用remoting接口就不会出现你的问题。
    问题4:remoting需要供其他人调用,暴露给别人的最好是接口,而不是直接的类的代码,这样不用担心调用者不小心改了你的程序。
    问题5:引用你的interface的project,然后用:
    IContactInterface icif = (IContactInterface)Activator.GetObject(typeof(IContactInterface), GetContactWmiUrl);
    然后就可以象调用一般的函数一样调用IContactInterface接口中的方法
      

  3.   

    谢谢 zhuxiaoke(考拉)
    1。这个我去实验下。
    2。问题如果我部署的时候换一个服务器,岂非又要重新编译一下??
    3。
    4。remoting需要供其他人调用?别人还要改变我的代码?不是很明白,这些代码不都是自己写好了吗?如果将来需要变更的话,只需改变自己本身的类就好了。类里面也可以设计好。只是我觉得用接口方便在sao和cao的转化。
    5。这方式是sao的应用还是cao的应用??恳请大家帮助。
      

  4.   

    2。问题如果我部署的时候换一个服务器,岂非又要重新编译一下??这个问题服务器和客户端都可以使用app.config文件来解决
      

  5.   

    我不懂remoting所以,我只能回答你的第一个问题,可以不通过文件。代码:MemoryStream ms=new MemoryStream();
    ser.Serialize(ms, m_xmlDoc);在这里,不知道memoryStream类型是否可以被序列化传输。如果不能,可以用这个方法:byte[] xmlBuffer=ms.ms.ToArray();然后,然后把xmlBuffer传出去用memoryStream并不比写文件快,而且,占用内存。但是,感觉这样,会比写盘要爽一些。 也许,在线程比较多的情况下,会有一些优势
      

  6.   

    录入出错:
    byte[] xmlBuffer=ms.ms.ToArray();应该是:
    byte[] xmlBuffer=ms.ToArray();