在一个服务中实现 多个契约 和终结点 z

一个服务作为一系列终结点被定义的。每个终结点都有一个地址,绑定和契约。契约就是暴露终结点能力的。地址就是这些应用或服务从网络的哪个地址可找到,契约是关于如何访问他们的。

在终结点和契约间有一对多的关系。一个终结点可以只有一个契约,但是一个契约可以被很多终结点引用。尽管一个终结点可以仅仅确认一个契约,接口 聚合使能一个单独的契约来暴露多个接口。另外,多个有同样绑定但是不同契约的终结点可以位于同一个地址,给一个单独终结点实现所有契约的假象。

通过在一个服务中的多个终结点暴露一个契约,你可以让服务在不同绑定下都可以访问。你可以定义一个终结点使用WS-I基础协议绑定来得到最大访 问量同时使用另外一个使用TCP协议和二进制编码的终结点来实现更快的性能。通过把多个接口变成一个接口的假象,你可以通过合并在一个单一的服务访问,初 步编纂成独立的接口能力。

列表2.10 在一个终结点中暴露多个契约

using System;
using System.ServiceModel;
using System.Threading;

namespace EssentialWCF
{
    [ServiceContract]
    public interface IGoodStockService
    {
        [OperationContract]
        double GetStockPrice(string ticker);
    }
    [ServiceContract]
    public interface IGreatStockService
    {
        [OperationContract]
        double GetStockPriceFast(string ticker);
    }
    [ServiceContract]
    public interface IALLStockServices : IGoodStockService, IGreatStockService{};
    public class AllStockServices : IALLStockServices
    {
        public double GetStockPrice(string ticker)
        {
            Thread.Sleep(5000);
            return 94.85;
        }
        public double GetStockPriceFast(string ticker)
        {
            return 94.85;
        }
    }
}

列表2.11一个为三个契约暴露多个终结点的配置文件。有一个为IGoodStockService契约的终结点,两个为IGreateStockService契约的终结点和一个为IAllStockServices契约的终结点。

因为有多个终结点共享一个寻址方案,每个终结点必须定义不同的地址。使用了相对地址,所以每个终结点的完全地址是服务基地址加上相对地址。

列表2.11 在一个服务中暴露多一个终结点

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.serviceModel>
    <services>
      <service name ="EssentialWCF.StockServices"                behaviorConfiguration="mexServiceBehavior">
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8000/EssentialWCF"/>
          </baseAddresses>
        </host>
        <endpoint name="GoodStockService"
                  binding="basicHttpBinding"
                  contract="EssentialWCF.IGoodStockService"/>
        <endpoint name="BetterStockService"
                  address="better"
                  binding="basicHttpBinding"
                  contract="EssentialWCF.IGreatStockService"/>
        <endpoint name="BestStockService"
                  address="best"
                  binding="wsHttpBinding"
                  contract="EssentialWCF.IGreatStockService"/>
        <endpoint name="AllStockServices"
                  address="all"
                  binding ="wsHttpBinding"
                  contract="EssentialWCF.IAllStockServices"/>
        <endpoint name ="mex"
                  binding ="mexHttpBinding"
                  contract="IMetadataExchange"
      </service>
    </services>
  </system.serviceModel>
</configuration>

因为IGreatStockService契约在多个终结点上暴露,客户端应用程序必须在为契约创建一个代理实例时引用终结点名称。如果终结点 名称没有确认,WCF将会抛出一个错误因为它无法知道使用哪个终结点。列表2.12显示了对GreatStockServiceClient代理的两次使 用:一次使用basicHttpBinding访问BetterStockService,另一次使用wsHttpBinding访问 BestStockService.

列表2.12 当多个终结点被定义使用名字确认每个终结点

using (localhost.GreatStockServiceClient proxy =
  new Client.localhost.GreatStockServiceClient("BetterStockService"))
{
  Console.WriteLine(proxy.GetStockPriceFast("MSFT"));
}
using (localhost.GreatStockServiceClient proxy =
  new Client.localhost.GreatStockServiceClient("BestStockService"))
{
  Console.WriteLine(proxy.GetStockPriceFast("MSFT"));
}
时间: 2024-10-10 14:29:01

在一个服务中实现 多个契约 和终结点 z的相关文章

增加、删除类文件或者在一个类中增加、删除方法时,是不能够热部署到服务上的。这时候需要停止服务器重新部署后再启动,就不会出现上面的提示了。

Hot Code Replace Failed 2010-11-05 10:11listquiry | 浏览 14226 次 Some code changes cannot be hot swapped into a running virtual machine, such as changing method names or introducing errors into running code.The current target virtual machine {jboss4Ser

Sql Server2012 报表服务中的SharePoint集成模式配置

前言 http://www.microsoft.com/zh-CN/download/details.aspx?id=29068# 在sql server2012报表配置管理器上没有“sharepint集成”模式选择项(采用新建),如下图: 怎么回事情呢?后来通过查询资料才知道,如下: 重要提示 从 SQL Server 2012 版本开始,Reporting Services 配置管理员不设计用来管理 SharePoint 模式报表服务器. SharePoing 模式通过使用 SharePoi

在angular2服务中注入服务

http://kittencup.com/javascript/2015/11/11/%E5%9C%A8angular2%E6%9C%8D%E5%8A%A1%E4%B8%AD%E6%B3%A8%E5%85%A5%E6%9C%8D%E5%8A%A1.html 如果你关注我们的文章 Angular2中的依赖注入,你知道DI系统在Angular中是如果运作的,它利用在我们代码上通过注解添加metadata来获取所有关于依赖的信息来解决我们的依赖关系 Angular 2 应用基本上可以用任何语言编写.只

基础问题:在一个 Activity 中定义的串口接收程序,如果 Activity 切换到其它 Activity 后还能接收到串口数据吗?

============问题描述============ RT:基础问题:在一个 Activity 中定义的串口接收程序,如果 Activity 切换到其它 Activity 后还能接收到串口数据吗? 我的程序有两个 Activity,在启动后的 Activity 中已经验证了接收与发送数据. 后继做了第二个 Activity,此时从第二个 Activity 返回 第一个 Activity 时串口的接收线程会出错.调试了一下,串口再次被初始化了. 问题: (1)不想串口被反复初始化,应该如何做?

谈谈微服务中的 API 网关(API Gateway)

转载至:http://www.cnblogs.com/savorboard/p/api-gateway.html 背景 我们知道在微服务架构风格中,一个大应用被拆分成为了多个小的服务系统提供出来,这些小的系统他们可以自成体系,也就是说这些小系统可以拥有自己的数据库,框架甚至语言等,这些小系统通常以提供 Rest Api 风格的接口来被 H5, Android, IOS 以及第三方应用程序调用. 但是在UI上进行展示的时候,我们通常需要在一个界面上展示很多数据,这些数据可能来自于不同的微服务中,举

微服务中基于Spring Boot的maven分布式项目框架的搭建

项目介绍 这里搭建的是基于 maven 的分布式工程,因为在一个项目中,多个微服务是属于同一个工程,只不过是提供不同的服务而已,再加上 IDEA 是默认一个窗口打开一个项目工程(这点和 eclipse 不同),如果项目大,不用 maven 聚合工程的话,那估计会打开十几个窗口--会崩溃--而且在架构上,也应该使用 maven 分布式工程来搭建微服务架构.这里手把手教大家在 IDEA 中搭建基于 maven 分布式的 Spring Cloud 微服务工程架构. maven分布式工程架构首先来看一下

在windows服务中托管asp.net.core

参考:https://docs.microsoft.com/zh-cn/aspnet/core/host-and-deploy/windows-service?view=aspnetcore-3.1&tabs=visual-studio 背景:项目各个模块部署在不同位置,因此采用了微服务架构.由于安装部署环境的差异,部分模块只能部署在xp系统下,其他部署环境考虑使用net.core,在windows服务中托管webapi,或者在webapi中寄宿windows服务,总而言之就是在一个程序中将wi

vuex中filter的使用 &amp;&amp; 快速判断一个数是否在一个数组中

vue中filter的使用 computed: mapState({ items: state => state.items.filter(function (value, index, arr) { return index < 5 }) }), 如上所示,对于vuex,我们在使用mapState获取state时, 可以使用filter来过滤其中的元素,在filter的回调函数中接受三个参数,第一个是value,即每一个元素的值: 第二个是index, 即每一个元素所在的index, 第三个

获取在一个数组中出现最多的字符及其所在的位置

获取在一个数组中出现最多的字符.个数及其所在的位置 <!DOCTYPE html> <html> <head> <title>一个数组中,出现次数最多的字符,及其位置</title> </head> <body> <script type="text/javascript"> var arr=["a","x","b","d