採用的是 Client端---APServer---DBServer三層架構
利用.net提供的Remoting方式進行通信,現在有個問題。
我寫好了一個處理數據邏輯的dll元件放在APServer作為服務
Client端程式也需要引用這個元件,才能根據需要調用其中的方法。
當然,Client端的元件可以和Server的一樣,也可以是個相同結構的空殼,但必須要有一個,
而目的隻是使Client端將其加入參考後才能編譯通過可是總覺得這樣怪怪的,想把Client端徹底和這個元件剝離,不知道大家有什麼辦法
也不知道業界對這種問題一般都是怎麼處理的謝謝………………………………………………………

解决方案 »

  1.   

    同意楼上不过这好像与Remoting 无关吧
      

  2.   

    学会了,我还一直郁闷,如果Client端也引用那个方法的话,客户端其实也拥有所有类库了,只是调用的是服务器端的了。安全考虑也不好。
      

  3.   

    感謝二位可是我要優化的目的就是想減少編碼以及維護的復雜度用接口以後,你的意思Client端就是繼承這個接口的空殼了,那如果接口一改,還不是Server和Client上的元件都要改。與其這樣,倒不如幹脆系統中就隻存在一個版本的元件,Server上和Client上放的都是它,有調整時調整後兩邊發布就好了。不過這樣總感覺還是將業務流開放在Client了,雖然運行時調用的是Server的代碼以上是我的理解,剛接觸這個系統,謬誤處請指正,謝謝 
      

  4.   

    我不觉得,因为你修改一个元件的话,如果是修改了元件的外观(属性,方法等),那么必然你Client端的代码也要改,Server端有什么好改的呢?(Server不过建立了一个Remoting通道,业务逻辑在元件内)。如果采用接口方式提供给Client,如果只修改了元件的内部实现,则不用修改Client端代码,而且连新的元件都不用发布,因为外观(接口)没变
      

  5.   

    "因为你修改一个元件的话,如果是修改了元件的外观(属性,方法等),那么必然你Client端的代码也要改"--------------------這句話說得好,結貼,感謝樓上各位。
      

  6.   

    我郁闷了……我回去做实验,发现个问题忽略了,interface不能实例化,那么
    string s = Assembly.GetExecutingAssembly().Location;
    RemotingConfiguration.Configure( s + ".Config " );
    之后调用比如IEntityControl entityControl = new EntityControl();的时候,那个
    new EntityControl();到底该是个什么样的类呢?接口是肯定不行的,因为接口不能实例化。looner (looner) 你搞定了嘛?给我说一下啊。
      

  7.   

    不是使用new 方式使用:
    iMyobject mo = (iMyobject)Activator.GetObject( typeof(iMyobject) ,  url);
    iMyobject 是一个接口
      

  8.   

    hdt(接分接出个星星) 你的方式用于服务器端激活模式没有问题,但是客户端激活模式就不行了。我看了一篇文章说采用服务器端激活模式传递一个工厂对象,然后用这个工厂来生成真正需要的对象,这样模拟实现客户端激活模式,但是我有个疑问:客户端激活模式对象的生命周期是通过租用的方式管理的,而这种模拟的方式会不会导致对象一直不会被回收?
      

  9.   

    一样可以,
    只要加一句WellknownClientTypeEntry ce = RemotingConfiguration.GetRegisteredWellKnownClientTypes();IMyObject  io = (IMyObject)Activator.GetObject( typeof(...) , ce , url);
      

  10.   

    hdt(接分接出个星星) 说得对 高手!