此种方法的好处是Web前端只需要加载一个 server端提供的dll,既可以类似本地调用函数的方法调用server进行处理,具体方法为: 1,共享的dll中的文件: 建立一个工程,创一个namespace,包含web前端与server共享的class类型(所有数据结构class 类型声明为Serializable),并且包含一个Interface,例如: namespace NQPInterface { public interface SearchInterface { NQPResult Search(NQPRequest nqpRequest); } [Serializable] public class NQPRequest { int aa; } [Serializable] public class NQPResult { int aa; } } 2,interface的实现必须也在相同的namespace下,但是可以将实现的代码放在Server端的其他工程中。比如: namespace NQPInterface { public class SearchImplt : MarshalByRefObject, SearchInterface { public SearchImplt() { Console.WriteLine("abc"); } public NQPResult Search(NQPRequest nqpRequest) { //actual process procedure } } } 3, 然后在Server端需要加入以下using的文件和代码: Add ” System.Runtime.Remoting “ dll at the server side (该文件通常存在于c盘的windows目录下) //加入以下using在server端需要用到 ChannelServices的代码中 using System.Runtime.Remoting; using System.Runtime.Remoting.Channels.Tcp; using System.Runtime.Remoting.Channels; public void ServerProcess() { int iPortNumber = 8044; // open port and register channel try { TcpChannel tcpChannel = new TcpChannel(iPortNumber); ChannelServices.RegisterChannel(tcpChannel, false); } catch (RemotingException ex) { return; } catch (Exception ex) { return; } // register service try { string ClientConstants = "name"; RemotingConfiguration.RegisterWellKnownServiceType( typeof(NQPInterface.SearchImplt), ClientConstants, WellKnownObjectMode.Singleton); } catch (Exception ex) { return; } // exit service while (true) { string str = Console.ReadLine(); if (str == "quit") { break; } } } 4, 在web 前段加载带有interface和共享数据结构的dll,然后加入以下代码: protected void Process() { NQPRequest nqReq = new NQPRequest(); NQPResult nqRes; try { int iPortNumber = 8044; string ClientConstants = "Name"; // try to get a handler SearchInterface searchInterface = Activator.GetObject(typeof(SearchInterface), "tcp://localhost:" + iPortNumber.ToString() + "/" + ClientConstants) as SearchInterface; nqRes = searchInterface.Search(nqReq); } catch (System.Exception ex) { return; } }