zoukankan      html  css  js  c++  java
  • [MSDN]WCF(3)配置服务

    说明:本内容来自微软的webcast,讲师为徐长龙。为了用手机阅读方便点,抄录存为txt。

    本次课程内容包括
    • 配置服务概述
    • 配置绑定
    • 配置终结点


    配置服务概述
    • 在设计和实现服务协定后,即可配置服务。在其中可以
    定义和自定义如何向客户端公开服务,包括指定可以找到
    服务的地址、服务用于发送和接收消息的传输和消息编码,
    以及服务需要的安全类型。
    • 配置服务的类型
    – 使用配置文件配置
    – 在代码中强制配置
    @@部署很不方便,需要重新编译。
    • 实际上,编写配置是WCF 应用程序编程的主要部分。


    配置服务概述
    • 使用配置文件配置WCF服务
    – 通过使用配置文件配置Windows Communication Foundation
    (WCF) 服务,可提供在部署时而非设计时提供终结点和服务行为
    数据的灵活性
    – 可使用.NET Framework 配置技术对WCF 服务进行配置。通常
    情况下,向承载WCF 服务的Internet 信息服务(IIS) 网站的
    Web.config 文件添加XML 元素。通过这些元素,可以逐台计算
    机更改详细信息,例如终结点地址(用于与服务进行通信的实际
    地址)。此外,WCF 包括几个系统提供的元素,可用于快速选
    择服务的最基本的功能
    – WCF 使用.NET Framework 的System.Configuration 配置系统
    • 使用IIS 来承载服务--使用Web.config 文件
    • 使用任何其他宿主环境—使用或App.config 文件指定设置。


    配置服务概述
    <system.ServiceModel>

    <services>
    <service>
    <endpoint/>
    </service>
    </services>

    绑定(可选)
    <bindings>
    <binding>
    </binding>
    </bindings>

    行为(可选)
    <behaviors>
    <behavior>
    </behavior>
    </behaviors>
    </system.ServiceModel>

    配置服务概述
    • Service元素
    • 每个服务都具有以下属性:
    – name。指定提供服务协定的实现的类型。这是完全限定名称
    (命名空间和类型名称)。
    – behaviorConfiguration。指定一个在behaviors 元素中找到的
    behavior 元素的名称。指定的行为控制操作,例如服务是否允许
    模拟。@@使用那组行为
     <service name="WcfServiceLibrary2.CalculatorService" behaviorConfiguration="WcfServiceLibrary2.Service1Behavior">

         <behaviors>
          <serviceBehaviors>
            <behavior name="WcfServiceLibrary2.Service1Behavior">

    • endpoint元素
    • 每个终结点都需要以下属性表示的地址、绑定和协定:
    – address。指定服务的统一资源标识符(URI),它可以是一个绝对
    地址,或是一个相对于服务基址给定的地址。如果设置为空字符
    串,则指示在创建服务的ServiceHost 时,终结点在指定的基址
    上可用。
    – binding。通常,指定一个类似WsHttpBinding 的系统提供的绑定,
    但也可以指定一个用户定义的绑定。指定的绑定确定传输协议类
    型、安全和使用的编码,以及是否支持或启用可靠会话、事务或
    流。
    – bindingConfiguration。如果必须修改绑定的默认值,则可通过在
    bindings 元素中配置相应的 binding 元素来执行此操作。此属性
    应赋予与用于更改默认值的binding 元素的name 属性相同的值。
    – contract。指定定义协定的接口。这是在由service 元素的name
    属性指定的公共语言运行库(CLR) 类型中实现的接口。
    • endpoint元素
            <!-- Service Endpoints -->
            <!-- 除非完全限定,否则地址将与上面提供的基址相关 -->
            <endpoint address ="" binding="wsDualHttpBinding" contract="WcfServiceLibrary2.ICalculatorDuplex">
     @@address ="":空,使用服务的基地址。baseAddress
     @@bindingConfiguration:没有就使用默认的。
     • binding元素
     <?xml version="1.0" encoding="utf-8"?>
    <configuration>
    <system.serviceModel>
    <bindings>
    <basicHttpBinding>
    <binding name="myBindingConfiguration1" closeTimeout="00:01:00" />
    <binding name="myBindingConfiguration2" closeTimeout="00:02:00" />
    </basicHttpBinding>
    </bindings>
    <services>
    <service name="myServiceType">
    <endpoint
    address="myAddress" binding="basicHttpBinding"
    bindingConfiguration="myBindingConfiguration1" />
    </service>
    </services>
    </system.serviceModel>
    </configuration>
    @@ endpoint 的binding="basicHttpBinding"关联bindings.basicHttpBinding
    @@ endpoint 的bindingConfiguration关联了——bindings.basicHttpBinding.binding name="myBindingConfiguration2"
    • behaviors元素
    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
    <system.serviceModel>
    <behaviors>
    <endpointBehaviors>
    <behavior name="myBehavior">
    <callbackDebug includeExceptionDetailInFaults="true" />
    </behavior>
    </endpointBehaviors>
    </behaviors>
    <services>
    <service name="NewServiceType">
    <endpoint
    address="myAddress" behaviorConfiguration="myBehavior"
    binding="basicHttpBinding" />
    </service>
    </services>
    </system.serviceModel>
    </configuration>

    绑定
    • 绑定是用于指定连接到Windows Communication Foundation (WCF)
    服务终结点所必需的通信详细信息的对象。WCF 服务中的每个终结
    点都要求正确指定绑定。
    • 绑定最起码必须指定要使用的传输(如HTTP 或TCP)。还可以通
    过绑定来设置其他特征,如安全和事务支持。
    • 绑定中的信息可能非常基本,也可能非常复杂。最基本的绑定仅指定
    必须用于连接到终结点的传输协议(如HTTP)。一般来说,绑定包
    含的有关如何连接到终结点的信息属于以下类别中的一种。
    – 协议
    • 确定要使用的安全机制:可靠消息传递功能或事务上下文流设置。
    – 编码
    • 确定消息编码(例如,文本或二进制)。
    – 传输
    • 确定要使用的基础传输协议(例如,TCP 或 HTTP)。
    • 绑定中的信息可能十分复杂,而且某些设置可能与其他设
    置不兼容。因此,WCF 包含一组系统提供的绑定。这些
    绑定旨在满足大多数应用程序要求。下面的类表示系统
    提供的绑定的一些示例:
    – BasicHttpBinding:一个HTTP 协议绑定,适用于连接到符合
    WS-I 基本配置文件规范的Web 服务(例如,基于ASP.NET
    Web 服务的服务)。
    – WSHttpBinding:一个可互操作的绑定,适用于连接到符合WS-*
    协议的终结点。
    – NetNamedPipeBinding:使用.NET Framework 连接到同一计算
    机上的其他WCF 终结点。
    – NetMsmqBinding:使用.NET Framework 创建与其他WCF 终结
    点的排队消息连接。
    • 使用自己的绑定
    – 如果系统提供的绑定都不具有服务应用程序所需的正确功能组合,
    则可以创建自己的绑定。有两种方法可以实现此目的。
    – 可以使用CustomBinding 对象从预先存在的绑定元素创建新的绑

    – 也可以通过从Binding 绑定派生来创建完全由用户定义的绑定
    • 使用绑定
    – 使用绑定需要执行两个基本步骤:
    – 选择或定义绑定。最简单的方法就是选择WCF 包含的系统提供
    绑定中的一个,并且通过该绑定的默认设置来使用它。
    – 创建一个使用所选择或定义的绑定的终结点。
    • 代码和配置
    – 可以通过两种方式来定义绑定:
    – 通过代码或通过配置。
    – 这两种方法与您使用的是系统提供的绑定还是自定义绑定无关。
    通常,使用代码可以使在设计时对绑定的定义拥有完全的控制。
    – 另一方面,使用配置则使系统管理员或WCF 服务或客户端的用
    户可以更改绑定的参数,而不必重新编译服务应用程序。由于无
    法预测用于部署WCF 应用程序的特定计算机要求,因而通常需
    要这种灵活性。通过将绑定(和寻址)信息保持在代码外部,人
    们可以更改这些信息,而不必重新编译或重新部署应用程序。
    – 请注意,代码中定义的绑定是在配置中指定的绑定之后创建的,
    这使得代码定义的绑定可以覆盖配置中定义的任何绑定。

    终结点
    • 与Windows Communication Foundation (WCF) 服务的
    所有通信是通过该服务的终结点进行的。利用终结点,
    客户端可访问WCF 服务提供的功能
    • 终结点的结构
    – 地址。地址唯一标识终结点并告知潜在客户服务的所在位置
    – 绑定。绑定指定如何与终结点进行通信
    – 服务协定。服务协定概述了终结点向客户端公开的功能
    • 指定服务的终结点有两种方式
    – 通过使用代码的强制方式或通过配置的声明方式。在代码中定义
    终结点通常并不可行,因为已部署服务的绑定和地址通常不同于
    开发服务时使用的绑定和地址。一般而言,使用配置定义服务终
    结点比使用代码更为可行。使绑定和寻址信息保持在代码之外可
    以在对它们进行更改后不必重新编译和重新部署应用程序。

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
    <system.serviceModel>
    <bindings>
    <basicHttpBinding>
    <binding name="myBindingConfiguration1" closeTimeout="00:01:00" />
    <binding name="myBindingConfiguration2" closeTimeout="00:02:00" />
    </basicHttpBinding>
    </bindings>
    <services>
    <service name="myServiceType">
    <endpoint
    address="myAddress" binding="basicHttpBinding"
    bindingConfiguration="myBindingConfiguration1" />
    </service>
    </services>
    </system.serviceModel>
    </configuration>


    终结点地址的定义
    • 终结点的地址由EndpointAddress 类表示,该类包含一个
    表示服务地址的统一资源定位符(URI),
    • 大多数传输的地址URI 包含四个部分。例如,
    “http://www.fabrikam.com:322/mathservice.svc/secure
    Endpoint”这个URI 具有以下四个部分:
    – 方案:http:
    – 计算机:www.fabrikam.com
    – (可选)端口:322
    – 路径:/mathservice.svc/secureEndpoint
    • 在配置文件中定义终结点地址
    <system.serviceModel>
    <services>
    <service
    name="Microsoft.ServiceModel.Samples.CalculatorService"
    behaviorConfiguration="CalculatorServiceBehavior">
    <host>
    <baseAddresses>
    <add baseAddress="http://localhost:8000/ServiceModelSamples/service"/>
    </baseAddresses>
    </host>
    <endpoint address=""
    binding="wsHttpBinding"
    contract="Microsoft.ServiceModel.Samples.ICalculator" />
    <endpoint address="/test"
    binding="wsHttpBinding"
    contract="Microsoft.ServiceModel.Samples.ICalculator" />
    Model.Samples.ICalculator" />
    <endpoint address="net.tcp://localhost:9000/servicemodelsamples/service"
    binding="netTcpBinding"
    contract="Microsoft.ServiceModel.Samples.ICalculator" />
    <!-- the mex endpoint is another reltive address explosed at
    http://localhost:8000/ServiceModelSamples/service/mex -->
    <endpoint address="mex"
    binding="mexHttpBinding"
    contract="IMetadataExchange" />
    </service>
    </services>
    • 在代码中定义终结点地址
    Uri baseAddress = new Uri("http://localhost:8000/HelloService");
    string address = "http://localhost:8000/HelloService/MyService";
    using (ServiceHost serviceHost = new ServiceHost(typeof(HelloService),
    baseAddress))
    {
    serviceHost.AddServiceEndpoint(typeof(IHello), new BasicHttpBinding(),
    address);
    serviceHost.Open();
    Console.WriteLine("Press <enter> to terminate service");
    Console.ReadLine();
    serviceHost.Close();
    }


    元数据终结点地址
    • Windows Communication Foundation (WCF) 服务通过发
    布一个或多个元数据终结点来发布元数据。
    • 发布服务元数据之后,可以通过标准协议(如WSMetadataExchange
    (MEX) 和 HTTP/GET 请求)来使用
    该元数据。
    • 元数据终结点类似于其他服务终结点:它们都有一个地
    址、一个绑定和一个协定,并且它们都可通过配置或使用
    代码添加到服务主机。
    • 若要启用发布元数据终结点,必须将
    ServiceMetadataBehavior 服务行为添加到该服务。默认
    情况下,WCF 服务不发布元数据终结点,所以必须将它
    们显式添加到服务才能为服务启用元数据发布。
    mexHttpBinding(对于HTTP 发布)。
    mexHttpsBinding(对于HTTPS 发布)
    mexNamedPipeBinding(对于命名管道 p gmexTcpBinding(对于TCP 发布)。
    <configuration>
    <system.serviceModel>
    <services>
    <service
    name="Metadata.Samples.SimpleService"
    behaviorConfiguration="SimpleServiceBehavior">
    <host>
    <baseAddresses>
    <add baseAddress="http://localhost:8001/MetadataSample"/>
    </baseAddresses>
    </host>
    <endpoint address="" binding="wsHttpBinding" contract="Metadata.Samples.ISimpleService" />
    <endpoint address="mex"
    binding="mexHttpBinding"
    contract="IMetadataExchange" />
    </service>
    </services>
    <behaviors>
    <serviceBehaviors>
    <behavior name="SimpleServiceBehavior">
    <serviceMetadata httpGetEnabled="True" policyVersion="Policy12" />
    <serviceDebug includeExceptionDetailInFaults="False" />
    </behavior>
    </serviceBehaviors>
    </behaviors>
    </system.serviceModel>

  • 相关阅读:
    WCF初探-21:WCF终结点(endpoint)
    WCF初探-20:WCF错误协定
    WCF初探-19:WCF消息协定
    WCF初探-18:WCF数据协定之KnownType
    WCF初探-17:WCF数据协定之等效性
    WCF初探-16:WCF数据协定之基础知识
    WCF初探-15:WCF操作协定
    WCF初探-14:WCF服务协定
    WCF初探-13:WCF客户端为双工服务创建回调对象
    WCF初探-12:WCF客户端异常处理
  • 原文地址:https://www.cnblogs.com/htht66/p/2328848.html
Copyright © 2011-2022 走看看