DotNET企业架构应用实践 - 用服务定位器(SL)完成服务的多种实现的统一调用

简介: 前面的文章服务定位器(SL)与AgileEAS.NET中的实现介绍了服务定位器的一些概念、应用场景与AgileEAS.NET平台中SL的实现,本文是这骗文件的一个例子与Demo,详细的演示SL在应用开发中的使用。

        前面的文章服务定位器(SL)与AgileEAS.NET中的实现介绍了服务定位器的一些概念、应用场景与AgileEAS.NET平台中SL的实现,本文是这骗文件的一个例子与Demo,详细的演示SL在应用开发中的使用。

        下面我说开始例子,假设有这么一个应用场景,我们需求一个Hello服务,并且需要在XML WebService、.NET Remoting和本地同进程中三种不同环境的应用,也就是说,这个服务可能会有三中实现,具体使用那一个,在应用过程中决定,我先贴个简单的类图:

wps_clip_image-20776

        现在我们来开始干活,一步一步实现这个应用,首先定义服务接口,建一个名称为Hello.Interface的类库项目,定义一个IHello接口:

    public interface IHello
    {
        string SayHello(string name);
    }
                 接着我们做WebService实现,添加一个Hello.WebService的ASP.NET Web服务应用程序并引用Hello.Interface,添加一个HelloService的WebService:
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [ToolboxItem(false)]
    public class HelloWebService : System.Web.Services.WebService,Hello.Interface.IHello
    {
        [WebMethod]
        public string SayHello(string name)
        {
            return "hello," + name;
        }
    }

        实现.NET Remoting和LocalComponent,添加一个名称为Hello.Service类库项目,添加一个类Hello:

 

 

 

        public string SayHello(string name)
        {
            return "hello," + name;
        }

        实现一个简单的.NET Remoting的运行环境,建一个名称为Hello.ServiceConsole的控制台项目:

 

    class Program
    {
        static void Main(string[] args)
        {
            TcpChannel channel = new TcpChannel(9001);   
            ChannelServices.RegisterChannel(channel, false);

            RemotingConfiguration.RegisterWellKnownServiceType(typeof(Hello.Service.HelloService), 
                "Hello", WellKnownObjectMode.Singleton);
            System.Console.ReadLine();
        }
    }

        最后完成我们的调用客户端,建一控制台项目Hello.Client,引用Hello.Interface项目和EAS.IOCContainer.dll、EAS.ServiceLocator.dll程序组,定义服务消费者HelloClient:
    class HelloClient
    {
        IHello hello = null;

        public HelloClient()
        {
            this.hello = ServiceFactory.GetService("HelloService", typeof(IHello)) as IHello;
        }

        public IHello Hello
        {
            get
            {
                return this.hello;
            }
        }        
    }

        控制台程序入口Program :

 

    class Program
    {
        static void Main(string[] args)
        {
            System.Console.WriteLine(new HelloClient().Hello.SayHello("james"));
            System.Console.ReadLine();
        }
    }

        定义配置文件App.config :

<configuration>
	<configSections>
		<section name="EAS.Services" 
				 type="EAS.ServiceLocators.ServiceConfigHandler,EAS.ServiceLocator" />
		<section name="EAS.Objects" 
				 type="EAS.Objects.ConfigHandler,EAS.IOCContainer"/>
	</configSections>
	<EAS.Objects>
		<object name="HelloObject" LifestyleType="Thread" 
				type="Hello.Service.HelloService,Hello.Service" />
	</EAS.Objects>
	<EAS.Services>
		<Services>
			<Service name="HelloService" service-type="DotNetRemoting" 
					 Singleton=" true" url="tcp://localhost:9001/Hello"/>
				<!--<Service name="HelloService" service-type="LocalComponent" 
							component="HelloObject" />-->
			<!--<Service name="HelloService" service-type="WebService" Singleton=" true" 
					 url="http://localhost:56824/HelloWebService.asmx"/>-->
		</Services>
	</EAS.Services>
</configuration>

        运行客户段,可以看到如下的输入截图:

wps_clip_image-23084

        是不是很简单,在实际应用中,对于这种服务运行环境的未知性,我们可以通过这种简单的方法进行处理,服务消费者只需求知道接口,而无需知道具体的实现,开发人员可以根据客户的不同应用场景而做出不同的实现,上例中的服务定义配置项中,我注释了DotNetRemoting和LocalComponent两种方式的Hello服务,大家可以释放放开其中的一个而注释另外两个用于配置运行。

         这个例子的源代码我已上传,请下载 Hello.Example.rar

QQ群:15118502

链接:AgileEAS.NET应用开发平台介绍

AgileEAS.NET之敏捷并行开发方法

敏捷软件工程实验室

目录
相关文章
|
11月前
【业务架构】价值实现、价值定位、价值创造
【业务架构】价值实现、价值定位、价值创造
|
存储 供应链 算法
《企业大数据系统构建实战:技术、架构、实施与应用》一第1章 企业大数据战略定位1.1 宏观
本节书摘来自华章出版社《企业大数据系统构建实战:技术、架构、实施与应用》一书中的第1章,第1.1节,作者 吕兆星 郑传峰 宋天龙 杨晓鹏,更多章节内容可以访问云栖社区“华章计算机”公众号查看 第1章 企业大数据战略定位 企业大数据的战略定位,决定了企业大数据发展的可行性、持续性、稳定性和高效性
1653 0
|
11天前
|
API 数据库 开发者
构建高效可靠的微服务架构:后端开发的新范式
【4月更文挑战第8天】 随着现代软件开发的复杂性日益增加,传统的单体应用架构面临着可扩展性、维护性和敏捷性的挑战。为了解决这些问题,微服务架构应运而生,并迅速成为后端开发领域的一股清流。本文将深入探讨微服务架构的设计原则、实施策略及其带来的优势与挑战,为后端开发者提供一种全新视角,以实现更加灵活、高效和稳定的系统构建。
18 0
|
10天前
|
Kubernetes 安全 Java
构建高效微服务架构:从理论到实践
【4月更文挑战第9天】 在当今快速迭代与竞争激烈的软件市场中,微服务架构以其灵活性、可扩展性及容错性,成为众多企业转型的首选。本文将深入探讨如何从零开始构建一个高效的微服务系统,覆盖从概念理解、设计原则、技术选型到部署维护的各个阶段。通过实际案例分析与最佳实践分享,旨在为后端工程师提供一套全面的微服务构建指南,帮助读者在面对复杂系统设计时能够做出明智的决策,并提升系统的可靠性与维护效率。
|
20天前
|
存储 监控 Kubernetes
探索微服务架构下的系统监控策略
在当今软件开发领域,微服务架构因其灵活性、可扩展性和容错性而日益受到青睐。然而,这种架构的复杂性也为系统监控带来了新的挑战。本文旨在探讨在微服务环境下实现有效系统监控的策略,以及如何利用这些策略来确保系统的健壮性和性能。我们将从监控的关键指标入手,讨论分布式追踪的重要性,并分析不同的监控工具和技术如何协同工作以提供全面的系统视图。
|
21天前
|
监控 Java 开发者
构建高效微服务架构:后端开发的新范式
在数字化转型的浪潮中,微服务架构以其灵活性、可扩展性和容错性成为企业技术战略的关键组成部分。本文深入探讨了微服务的核心概念,包括其设计原则、技术栈选择以及与容器化和编排技术的融合。通过实际案例分析,展示了如何利用微服务架构提升系统性能,实现快速迭代部署,并通过服务的解耦来提高整体系统的可靠性。
|
2天前
|
机器学习/深度学习 运维 Prometheus
探索微服务架构下的系统监控策略
【4月更文挑战第18天】在当今快速迭代和持续部署盛行的软件工程实践中,微服务架构因其灵活性和可扩展性受到企业青睐。然而,随着服务的细粒度拆分和网络通信的增加,传统的监控手段已不再适用。本文将探讨在微服务环境中实施有效系统监控的策略,包括日志聚合、性能指标收集、分布式追踪以及异常检测等关键技术实践,旨在为读者提供构建稳定、可靠且易于维护的微服务系统的参考指南。
7 0
|
2天前
|
监控 持续交付 开发者
构建高效微服务架构:后端开发的新趋势
【4月更文挑战第18天】在数字化转型的浪潮中,微服务架构已成为企业提升系统灵活性、加速产品迭代的关键。此文深入探讨了构建高效微服务架构的实践方法,包括服务划分原则、容器化部署、持续集成/持续部署(CI/CD)流程以及监控与日志管理等关键技术点。通过分析具体案例,揭示了微服务在提高开发效率、降低维护成本及促进团队协作方面的显著优势。