客户端调用服务端的类,这些类不在客户端,实例在服务端创建。用romoting
我也不是很精通,看看msdn,关于romoting,webservice

解决方案 »

  1.   

    我主要想知道一种思想,webservice的服务器不一定和我的应用程序服务器在同一台服务器上,我想知道这种操作的流程走向,服务器端到底有什么功能?主要用来做什么的?
      

  2.   

    在c#中c/s的模式是在服务器首先要有一个Socket要Bing绑定到本地的端口,在这个绑定的端口上还要有一个socket在Listen(监听),当客户connect时,并创建一个新的Socket来Accept
    客户的connect.这是服务器和客户端就建立有效的连接,可以进行Receive和Send数据了
      

  3.   

    //定义接口以便在服务器端和客户端进行调用
    namespace Server_CS
    {
        using System;
        public interface IServer
        {
             void md(string dir);//创建目录
        }
    }//服务器端程序
    ...
    //必须的引用
    using System.Runtime.Remoting;
    using System.Runtime.Remoting.Channels;
    using System.Runtime.Remoting.Channels.Http;//或者用Tcp
    namespace Server_CS
    {
        public class Server : MarshalByRefObject,IServer
        {
            public void md(string dir)
            {
                if(Directory.Exists(dir)==false)//判断目录是否存在如果不存在立即生成
       {
           Directory.CreateDirectory(dir);
        }
            }
        }
        public class ServerTest
        {
            public static void Main()
            {
                 //创建并注册信道
                 HttpChannel chan = new HttpChannel(65100);
                 ChannelServives.RegisterChannel(chan);             Type serverType = Type.GetType("Server_CS.Server");
                 
                 //注册类型并让服务器与端点连接
                 RemotingCofiguration.RegisterWellKnownServiceType
                      (serverType,"thePoint",WellKnownObjectMode.Singleton);
                 
                 Console.WriteLine("服务启动成功!");
                 Console.ReadLine();
            }
        }
    }
      

  4.   

    //客户端程序
    namespace Server_CS
    {
        using System;
        using System.Runtime.Remoting;
        using System.Runtime.Remoting.Channel;
        using System.Runtime.Remoting.Channel.Http;//要与服务器端的类型一致
        public class Client
        {
            public static void Main()
            {
                //创建并注册Http信道 用0表示随机产生
                HttpChannel chan = new HttpChannel(0);
                ChannelServices.RegisterChannel(chan);
                
                //从Http信道获取对象
                MarshalByRefObject obj = 
                     (MarshalByRefObject) RemotingServices.Connect(typeof(Server_CS.IServer),"http://localhost:65100/thePoint");//这里的地址为你服务器的IP
                
                try
                {
                    Server_CS.IServer server = obj as Server_CS.IServer;
                    server.md(@"d:\test");
                catch(System.Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
                      
            }
        }
    }
      

  5.   

    尽量不要用到Socket,太底层,容易出错。
    有三种方案:
    1)COM+方案,微软原来的远程计算模式,太复杂,但提供事务处理;
    2).Net WebService,标准,集成性好,但接口级别太高,且目前不成熟,无事务处理机制。
    3).Net Remoting,微软的COM+替代解决方案,效率较.NetWebService高几倍,编程接口级别较WebService低,可二次编程能力高。但我还不知道支持不支持事务机制,估计是支持的。如果看重效率、可编程性,那么考虑.Net Remoting,否则,考虑.Net WebService。如果对事务处理要求很高,那么我也不知道了...我WebService举个例子吧:
    [WebMethod]
    string ErrMsg CreateFolder(string FolderName)
    {
        //检查用户Session,判断用户权限
        if(未登录)return "未登录";
        if(权限不够)return "权限不够";
        //开始创建
        if(创建(FolderName) != 成功) return "创建失败";
        return "S_OK";//代表成功
    }哈哈,就这么简单