创建基本WCF 服务时,第三项任务是承载和运行先前实现的WCF服务.此过程包含以下步骤:
       1、为服务创建基址。
       2、为服务创建服务主机。
       3、启用元数据交换。
       4、打开服务主机。
下面就详细说明通过上述四个步骤把我们的WCF服务运行起来。
 
(1)为服务配置基址
         为服务的基址创建Uri实例。此URI 指定HTTP协议、本地计算机、端口号 8000.
        Uri baseAddress = new Uri(" [url]http://localhost:8000/[/url]ServiceModelSamples/Service");
 
(2) 承载服务
       1、创建一个新的 ServiceHost 实例以承载服务。必须指定实现服务协定和基址的类型。 对于此示例,我们将基址指定为 [url]http://localhost:8000/ServiceModelSamples/Services[/url],并将 CalculatorService 指定为实现服务协定的类型。
        ServiceHost selfHost = new ServiceHost(typeof(CalculatorService), baseAddress);
       2、添加一个 try- catch 语句,并在接下来的三个步骤中将下述代码添加到 try 块中。
  
      3、添加公开服务的终结点。为此,必须指定终结点公开的协议、绑定和终结点的地址。 对于此示例,将 ICalculator 指定为协定,将 WSHttpBinding 指定为绑定,并将 CalculatorService 指定为地址。 在这里请注意,我们指定的是相对地址。 终结点的完整地址是基址和终结点地址的组合。 在此例中,完整地址是 [url]http://localhost:8000/ServiceModelSamples/Services/CalculatorService[/url]
 
       selfHost.AddServiceEndpoint( typeof(ICalculator),
                                                                new WSHttpBinding(),
                                                                "CalculatorService");
 
     4、启用元数据交换。为此,必须添加服务元数据行为。 首先创建一个 ServiceMetadataBehavior 实例,将 HttpGetEnabled 属性设置为 true,然后为服务添加新行为。
           ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
           smb.HttpGetEnabled = true;
          selfHost.Description.Behaviors.Add(smb);
 
   5、打开 ServiceHost 并等待传入消息。 用户按 Enter 键时,关闭 ServiceHost
         selfHost.Open();
        Console.WriteLine( "The service is ready.");
        Console.WriteLine( "Press <ENTER> to terminate service.");
        Console.WriteLine();
        Console.ReadLine();
        selfHost.Close();
 
完整代码如下:
     class Program
    {
        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(ICalculator),
                                                                          new WSHttpBinding(),
                                                                         "CalculatorService");

                ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
                smb.HttpGetEnabled = true;
                selfHost.Description.Behaviors.Add(smb);

                selfHost.Open();
                Console.WriteLine( "The service is ready.");
                Console.WriteLine( "Press <ENTER> to terminate service.");
                Console.WriteLine();
                Console.ReadLine();
                selfHost.Close();
            }
            catch (CommunicationException ce)
            {
                Console.WriteLine( "An CommunicationException occurred: {0}", ce.Message);
                selfHost.Abort();
            }
            catch (Exception ex)
            {
                Console.WriteLine( "An exception occurred: {0}", ex.Message);
                selfHost.Abort();
            }
        }
    }
若要运行服务,请启动控制台应用程序。启动服务后,请导航至该服务的调试页 [url]http://localhost:8000/ServiceModelSamples/Services[/url],验证该服务是否正在运行。(如果服务在运行,则会显示如附件中的[正在运行.jpg].
 
 
至此已经完成承载和运行基本的WCF服务,服务运行后,下一步是创建一个客户端以访问该服务。 (详情请见下一篇《构建高性能分布式搜索引擎(Wcf-示例篇)五之创建WCF服务客户端》.
 
 
如果有需要可以下载附件示例项目作参考!
此方法为代码配置服务方式,如果有需要通过配置文件配置服务的朋友,请留下Email,我会把示例发到你的Email中.
 
 
深圳E搜科技(搜索引擎技术钻研者!)
QQ群:15911745
QQ:448114915;934724029
Mobile:13168078506;13713628016
Email:pc2004lcq@126.com;jackbison@163.com