【WCF】WCF框架创建

代码创建

Service

接口

       创建服务组件之前,需要先引用System.ServiceModel,下面的所有代码都需要引用。

    [ServiceContract]
    public interface IHelloService
    {
        /// 
        /// 服务操作
        /// 
        /// 
        /// 
        [OperationContract]//仅这样的标识才能将方法放入service
        string SayHello(string name);
    }

实现类

    public class HelloService : IHelloService
    {
        /// 
        /// 打招呼
        /// 
        /// 
        /// 
        public string SayHello(string name)
        {
            return name+"说:您好!";
        }
    }

ServiceHost配置

    class Program
    {
        static void Main(string[] args)
        {
            using (MyHelloHost Host = new MyHelloHost())
            {
                Host.Open();
                Console.Read();
            }
        }
    }

    public class MyHelloHost : IDisposable
    {
        /// 
        /// 定义一个服务对象
        /// 
        private ServiceHost _myhost;

        /// 
        /// 定义一个基地址
        /// 
        public const string BaseAddress = "net.pipe://localhost";

        /// 
        /// 可选地址
        /// 
        public const string HelloServiceAddress = "Hello";

        //服务契约实现类型
        public static readonly Type ServiceType = typeof(HelloService.HelloService);//需要先添加引用
       //服务契约接口
       public static readonly Type ContractType = typeof(HelloService.IHelloService);

        /// 
        /// 服务定义一个绑定
        /// 
        public static readonly Binding hellobinding = new NetNamedPipeBinding();

        /// 
        /// 构造服务对象
        /// 
        protected void CreateHelloServiceHost()
        {
            //创建服务对象
            _myhost = new ServiceHost(ServiceType, new Uri[] { new Uri(BaseAddress)});
            //添加终节点
            _myhost.AddServiceEndpoint(ContractType, hellobinding, HelloServiceAddress);
        }

        //封装服务对象
        public ServiceHost Myhost
        {
            get { return _myhost; }
        }

        /// 
        /// 打开服务方法
        /// 
        public void Open()
        {
            Console.WriteLine("开始启动服务……");
            _myhost.Open();
            Console.WriteLine("服务已经启动……");
        }

        /// 
        /// 构造方法
        /// 
        public MyHelloHost()
        {
            CreateHelloServiceHost();
        }

        /// 
        /// 销毁服务宿主对象实例
        /// 
        public void Dispose()
        {
            if (_myhost != null)
            {
                (_myhost as IDisposable).Dispose();
            }
        }
    }

Client客户端

        使用之前需要先引入不再同一个项目中的服务

    class Program
    {
        static void Main(string[] args)
        {
            using (HelloProxy proxy = new HelloProxy())
            {
                //利用代理调用服务
                Console.WriteLine(proxy.Say("张三"));
                Console.ReadKey();
            }
        }
    }

    //硬编码定义服务契约
    [ServiceContract]
    interface IService
    {
        //服务操作
        [OperationContract]
        String Say(String name);
    }

    /// 
    /// 客户端代理类型   :ClientBase创建客户端对象
    /// 
    class HelloProxy :ClientBase,IService
    {
        //硬编码定义绑定
        public static readonly Binding HelloBinding = new NetNamedPipeBinding();
        //硬编码定义地址
        public static readonly EndpointAddress HelloAddress = new EndpointAddress(new Uri("net.pipe://localhost/Hello"));//uri必须与服务端中的匹配,才能访问服务端内容,详情见HelloServiceHost/Program.cs

        /// 
        /// 构造方法
        /// 
        public HelloProxy() : base(HelloBinding, HelloAddress) { }
        public string Say(string name)
        {
            //使用channel属性对服务进行调用
            return Channel.SayHello(name);
        }
    }

配置文件创建

        通过配置文件创建WCF项目,只是将上面的ServiceHost中的代码通过配置文件配置,及使用配置文件替换ServiceHost手动编码。其它没有变动。



     
        
    
  
    
      
        
          
            
          
        
        
      
    
    
      
        
          
        
      
    
  


        在配置时,无论是手动还是配置文件,都需要注意,确定使用的传输协议,以及URI服务端和客户端要保持一致,才能成功。

你可能感兴趣的:(C#,Web,框架,WCF,XML)