WCF学习笔记1--发布使用配置文件的服务

  关于WCF的入门网上资料很多,可以参考蒋金楠老师的博客http://www.cnblogs.com/artech/archive/2007/02/26/656901.html,我是从这篇博客开始学习的,下面会引用蒋老师博客中的代码示例。这里阶段性总结一下WCF中配置文件的使用。对服务进行寄宿时,需要配置服务的信息,一种方法是使用代码,另一种方式是使用配置文件。使用代码有助于理解,单每发布一个服务都要写一堆代码,使用配置文件可以简化代码,但初学者看到会稍微觉得复杂。好在理解WCF的原理后,我们可以使用IDE中工具进行配置,不要我们手工去写,非常方便。

  前提是我已经写好了服务Services.CalculatorService,实现的契约是Contracts.ICalculator,这里写的是完全限定名。

  OK。。。首先用代码实现服务的寄宿,想让外部访问到发布的服务,必须知道地址、如何通信、服务的功能及对服务的描述。

            using (ServiceHost host = new ServiceHost(typeof(CalculatorService)))
            {
                host.AddServiceEndpoint(typeof(ICalculator), new WSHttpBinding(), "http://127.0.0.1:9999/calculatorservice");
                if (host.Description.Behaviors.Find<ServiceMetadataBehavior>() == null)
                {
                    ServiceMetadataBehavior behavior = new ServiceMetadataBehavior { HttpGetEnabled = true, HttpGetUrl = new Uri("http://127.0.0.1:9999/calculatorservice/metadata") };
                    host.Description.Behaviors.Add(behavior);
                }
                host.Opened += delegate
                {
                    Console.WriteLine("CalculaorService已经启动,按任意键终止服务!");
                };

                host.Open();
                Console.Read();
            }

  过程是这样的,首先创建了一个ServiceHost 对象,该对象指定了服务类型,然后把关于服务的信息添加到这个对象中。

1、添加终结点:host.AddServiceEndpoint(typeof(ICalculator), new WSHttpBinding(), "http://127.0.0.1:9999/calculatorservice"); 指定了契约、绑定和地址,客户端访问服务时,基于相同的信息进行匹配。

2、添加服务行为:ServiceMetadataBehavior behavior = new ServiceMetadataBehavior { HttpGetEnabled = true, HttpGetUrl = new Uri("http://127.0.0.1:9999/calculatorservice/metadata") }; host.Description.Behaviors.Add(behavior); 指定了服务的描述性元数据的地址(HttpGetUrl) 及获取方式(HttpGetEnabled)。

  运行上述代码就可以启动服务,在控制台程序停止前,服务会一直存在,所以说服务寄宿在控制台程序上。

 

  接下来,同配置工具的把服务的信息放到配置文件,在VS2010中,打开 工具/WCF服务配置编辑器,点击文件/新建配置,在配置栏中右键点击服务节点,新建服务NewServiceType,点击NewServiceType,指定Name属性为Services.CalculatorService(指定服务类型)。

1、添加终结点:右键点击终结点,新建服务终结点,指定Address(http://127.0.0.1:9999/calculatorservice),指定Binding(wsHttpBinding),指定Contract(Contracts.ICalculator)。

2、服务行为:选择 高级/服务行为 节点,新建服务行为配置NewBehavior0,在行为元素扩展位置中添加serviceMetadata,双击serviceMetadata,指定HttpGetEnabled(True),指定HttpGetUrl(http://127.0.0.1:9999/calculatorservice/metadata)。

  最后在Services.CalculatorService的属性中指定BehaviorConfiguration(NewBehavior0)。

  这样就完成了服务信息的配置文件,可以看出配置的过程和写代码过程原理是一样的。通常将文件保存为App.config,并添加到宿主项目所在的目录。下面是配置文件的内容

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.serviceModel>
        <behaviors>
            <serviceBehaviors>
                <behavior name="NewBehavior0">
                    <serviceMetadata httpGetEnabled="true" httpGetUrl="http://127.0.0.1:9999/calculatorservice/metadata" />
                </behavior>
            </serviceBehaviors>
        </behaviors>
        <services>
            <service behaviorConfiguration="NewBehavior0" name="Services.CalculatorService">
                <endpoint address="http://127.0.0.1:9999/calculatorservice" binding="wsHttpBinding"
                    bindingConfiguration="" contract="Contracts.ICalculator" />
            </service>
        </services>
    </system.serviceModel>
</configuration>

  有了配置文件,代码可以简化,如下:

             using (ServiceHost host = new ServiceHost(typeof(CalculatorService)))
             {                
                 host.Opened += delegate
                 {
                     Console.WriteLine("CalculaorService已经启动,按任意键终止服务!");
                 };
  
                 host.Open();
                 Console.Read();
             }

 

posted @ 2016-03-08 16:31  Unchained Melody  阅读(641)  评论(0编辑  收藏  举报