【WCF系列】(三)如何配置和承载服务

如何配置和承载服务

配置绑定

配置服务:任务

为什么要配置服务:在设计和实现服务协定后,即可配置服务。 在其中可以定义和自定义如何向客户端公开服务指定可以找到服务的地址、服务用于发送和接收消息的传输和消息编码,以及服务需要的安全类型

两种配置方式
在配置文件中配置
在代码中配置

配置服务:通过配置文件

WCF术语介绍

服务协定:服务协定将多个相关的操作联系在一起,组成单个功能单元。 协定可以定义服务级设置,如服务的命名空间、对应的回调协定以及其他此类设置。 在大多数情况下,协定是通过用您所选的编程语言创建一个接口并将 ServiceContractAttribute 属性应用于该接口来定义的。 通过实现该接口,可生成实际的服务代码。

操作协定:操作协定定义参数并返回操作的类型。 在创建定义服务协定的接口时,可以通过将 OperationContractAttribute 属性应用于协定中包含的每个方法定义来表示一个操作协定。 可以将操作建模为采用单个消息作为参数并返回单个消息,或者建模为采用一组类型作为参数并返回一个类型。 在后一种情况下,系统将确定需要为该操作交换的消息的格式。

宿主:服务必须承载于某个进程中。 “宿主”是控制服务的生存期的应用程序。 服务可以是自承载的,也可以由现有的宿主进程进行管理。

 

Service元素

Service元素:在<services>配置节中可以定义多个服务,每一个服务都被放到<service>配置节中,WCF的宿主程序可以通过配置文件找到这些定义的服务并发布这些服务。

每个服务都具有以下属性:
  name:指定提供服务协定的实现的类型。 这是完全限定名称(命名空间和类型名称)
  behaviorConfiguration:指定一个在behaviors 元素中找到的behavior 元素的名称。 指定的行为控制操作,例如服务是否允许模拟。

<service>配置节包含name和behaviorConfiguration属性。其中,name配置了实现Service Contract的类型名。类型名必须是完整地包含了命名空间和类型名。而behaviorConfiguration的配置值则与其后的<behaviors>配置节的内容有关。<endpoint>是<service>配置节的主体,其中,<endpoint>配置节包含了endpoint的三个组成部分:Address、Binding和Contract。由于具体的binding配置是在<bindings>配置节中完成,因而,在<endpoint>中配置了bindingConfiguration属性,指向具体的binding配置。

<services>
    <service name="BruceZhang.MyService" behaviorConfiguration="MyBehavior">
        <endpoint address="" 
            binding="netTcpBinding" 
            bindingConfiguration="DuplexBinding" 
            contract="BruceZhang.IHello" />
    </service>
</services>
<behaviors>配置节

  当我们在定义一个实现了Service Contract的类时, binding和address信息是客户端必须知道的,否则无法调用该服务。然而,如果需要指定服务在执行方面的相关特性时,就必须定义服务的behavior。

Endpoint元素

每个终结点都需要以下属性表示的地址、绑定和协定:

address:指定服务的统一资源标识符(URI),它可以是一个绝对地址或是一个相对于服务基址给定的地址,如果设置为空字符串,则指示在创建服务的ServiceHost时,终结点在指定的基址上可用。

Binding:通常,指定一个类似WsHttpBinding的系统提供的绑定,但也可以指定一个用户定义的绑定。 指定的绑定确定传输协议类型、安全和使用的编码,以及是否支持或启用可靠会话、事务或流。

bindingConfiguration:如果必须修改绑定的默认值,则可通过在bindings元素中配置相应的binding元素来执行此操作 此属性应赋予与用于更改默认值的binding 元素的name 属性相同的值。

contract:指定定义协定的接口。 这是在由service 元素的name 属性指定的公共语言运行库(CLR) 类型中实现的接口。

<services>
    <service name="WcfServiceThree.Service1" behaviorConfiguration="serviceDemo">
        <host>
            <baseAddresses>
                <add baseAddress="http://localhost:1123/Service1.svc/Service1"/>
            </baseAddresses>
        </host>
        <endpoint address="" binding="wsDualHttpBinding" contract="WcfServiceThree.IService1">
            <identity>
                <dns value="localhost"/>
            </identity>
        </endpoint>
    </service>
</services>
<behaviors>
    <serviceBehaviors>
        <behavior name="serviceDemo">
            <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
            <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
    </serviceBehaviors>
</behaviors>
View Code

绑定是用于指定连接到WCF服务终结点所必需的通信详细信息的对象,WCF服务中的每个终结都要求正确指定绑定
绑定最起码必须指定要使用的传输(如HTTP 或TCP
绑定包含的有关如何连接到终结点的信息属于以下类别中的一种。
– 协议: 确定要使用的安全机制:可靠消息传递功能或事务上下文流设置。
– 编码: 确定消息编码(例如,文本或二进制)。
– 传输:确定要使用的基础传输协议(例如 TCP或HTTP)

WCF 包含一组系统提供的绑定。这些绑定旨在满足大多数应用程序要求。 下面的类表示系统提供的绑定的一些示例:
– BasicHttpBinding:一个HTTP 协议绑定,适用于连接到符合WS-I 基本配置文件规范的Web 服务(例如,基于ASP.NET Web 服务的服务)。
– WSHttpBinding:一个可互操作的绑定,适用于连接到符合WS-* 协议的终结点。 协议的终结点。
– NetNamedPipeBinding:使用.NET Framework 连接到同一计算机上的其他WCF 终结点。
– NetMsmqBinding:使用.NET Framework 创建与其他WCF 终结点的排队消息连接。.

配置服务:使用代码实现
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();
    serviceHost.Close();
}
View Code

转载于:https://www.cnblogs.com/wyt007/p/8682927.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Visual Studio 中创建 WCF 服务时,有两种项目类型可供选择:WCF 服务应用程序和 WCF 服务库。这两种项目类型有以下区别: 1. WCF 服务应用程序是一种可执行文件,它包含了一个独立的 WCF 服务宿主。这意味着您可以直接运行 WCF 服务应用程序,并使用其自带的服务宿主来运行和测试您的 WCF 服务。当您部署 WCF 服务时,您可以将 WCF 服务应用程序部署到 IIS 或自定义的 Windows 服务中。 2. WCF 服务库是一种库项目,它包含了一个或多个 WCF 服务契约和实现类。这意味着您必须将 WCF 服务库引用到另一个托管应用程序中,然后手动配置该应用程序的服务宿主来运行和测试您的 WCF 服务。当您部署 WCF 服务时,您可以将 WCF 服务库部署到 IIS 中,但必须将其部署为 WCF 服务应用程序的一部分。 3. WCF 服务应用程序和 WCF 服务库的项目结构也不同。WCF 服务应用程序包含了一个 .svc 文件和一个 Web.config 配置文件,用于配置 WCF 服务宿主和服务终结点。而 WCF 服务库只包含 WCF 服务契约和实现类,这些类通常包含在一个或多个 .cs 文件中。 4. 在使用 WCF 服务应用程序时,您可以使用 Visual Studio 自带的 WCF 测试客户端来测试您的 WCF 服务。而在使用 WCF 服务库时,您必须手动编写测试客户端或使用第三方测试工具来测试您的 WCF 服务。 总之,WCF 服务应用程序是一种独立的 WCF 服务宿主,适用于独立运行和测试 WCF 服务。而 WCF 服务库则是一种库项目,适用于将 WCF 服务集成到其他托管应用程序中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值