WCF协定以及服务逻辑实现之后,如果客户端能够对其进行调用,则需要将上文的服务协定运行起来,运行服务协定需要创建服务终结点、地址、激活元数据交换、以及最终的服务启动和停止功能

1.创建基本地址和服务主机

 Uri baseAddress = new Uri("http://localhost:8000/ServiceModelSamples/Service");//创建基本地址
 ServiceHost selfHost = new ServiceHost(typeof(CalculatorService),baseAddress);//创建服务主机

2.添加服务终结点

 selfHost.AddServiceEndpoint(typeof(IService), new WSHttpBinding(), "CalculatorService");//参数分别为接口类型、传输协议、服务名称

3.启动元数据交换

         ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
         smb.HttpGetEnabled = true;//启用HttpGet
         selfHost.Description.Behaviors.Add(smb);//添加元数据

4.启动和终止WCF服务

          selfHost.Open();
          Console.WriteLine("服务已启动.");
          Console.WriteLine("按Enter终止服务.");
          Console.WriteLine();
          Console.ReadLine();
          selfHost.Close();

至此服务就能运行起来 完整代码如下

  static void Main(string[] args)
        {
            Uri baseAddress = new Uri("http://localhost:8000/ServiceModelSamples/Service");
            ServiceHost selfHost = new ServiceHost(typeof(CalculatorService),baseAddress);
            try
            {
                selfHost.AddServiceEndpoint(typeof(IService), new WSHttpBinding(), "CalculatorService");
                ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
                smb.HttpGetEnabled = true;
                selfHost.Description.Behaviors.Add(smb);
                selfHost.Open();
                Console.WriteLine("服务已启动.");
                Console.WriteLine("按Enter终止服务.");
                Console.WriteLine();
                Console.ReadLine();
                selfHost.Close();
            }
            catch(CommunicationException e)
            {
                Console.WriteLine("异常:{0}",e.Message);
                selfHost.Abort();
            }
        }

在WCF客户端创建和调用时 必需保持该服务在启动状态

posted on 2012-09-06 13:22  aking96  阅读(241)  评论(0编辑  收藏  举报