zoukankan      html  css  js  c++  java
  • Indigo参考 (1) :第一个Indigo Service (转)

    原文链接: http://blog.joycode.com/kaneboy/archive/2005/03/31/46667.aspx

         在谈到更具体的话题之前,先说说什么是Indigo

         (1)最官方的答案是:“Indigo是一组用于构建和运行Connected System.Net技术集合,是用于构建面向服务系统的通讯基础组件”。

         (2)如果要具有“煽动性”一些,那么可以用这样的话:“Indigo是在未来打算接管.ASMX WebServiceWSERemotingDCOMMSMQ等分布式系统通讯组件的东东”。

         OK,我们先来接触一下Indigo的几个非常重要的概念术语,我希望用尽可能短的描述来让大家对这些术语有一个清晰的了解:

    Service:一个服务,我们下面要演示的就是要创建一个Indigo Service

    Operation:每个Service都包含一个或多个OperationOperation就是Service能做的事情。

    Service Contract:用来描述服务的契约,Service ContractService用来向Client介绍和说明自己的手段,Client要调用Service,需要先了解Service Contract

    Service UriServiceUri,要让Client能找到ServiceService就要有一个Uri公布出去。

    EndpointService公开的“端口”,Client通过这些Endpoint连接到Service,一个Service可以有一个或多个Endpoint

    Endpoint AddressEndpoint的地址,Service Uri + Endpoint Address,最终组成了Client连接此Endpoint的全地址。

    Endpoint BindingEndpoint所采用的网络协议、通讯方式、信息编码格式等,Indigo内置了一些标准的Binding,比如:WsProfileBinding是采用http/https、文本编码的一种BindingNetProfileTcpBinding是采用Tcp、二进制编码的一种Binding

     

         对于每个Service,都需要有一个Host(中文常翻译为宿主)。Indigo支持多种Host形式,当前的Indigo CTPWinXP/Win2003上支持IIS-HostSelf-Host,而在Longhorn平台上则还支持更佳的WAS-HostIIS7-HostIIS-Host类似于现在的.ASMX WebService,由IIS管理,Self-Host则是通过代码创建一个ServiceHost对象,让任意类型的程序(ConsoleWinForms…)都能成为Host。推荐大家在可能的情况下采用IIS-Host,因为这样可以得到IIS自带的自动回收进程、进程监视等优点。当然,在需要使用更高效率的Tcp协议通讯/二进制编码信息的场合,就需要用到Self-Host了,我们可以通过创建一个Indigo Windows Service来实现不间断的服务

     

         IndigoEndpoint的设定支持配置文件的方式,而且也推荐使用配置文件的方式,而不要硬编码。这样,当我们需要让现有的普通采用Http协议/文本编码配置的Indigo Service改为另外一种协议或编码时,就只需要更改配置文件中的配置即可。

         

         OK,下面我们开始真正的编码。我们首先创建一个Indigo Service

         在VS2005中新建一个ASP.NET项目,然后在项目里面增加一个类(VS2005应该会自动提示我们将文件放置到App_Code目录下):

         

    Code

    如上,我们建立了一个Service Contract,在这个Service里面有一个Operation,叫做Add。然后,我们在站点根目录建立一个MathService.svc文件,内容如下:

     

    <%@Service class="MathService" Debug="true" language="cs"%>

     

    然后我们在web.config里面加上Indigo的配置:

     

    <system.serviceModel>

        <services>

          <service serviceType="MathService">

            <endpoint contractType="MathService" address="Ep1"

              bindingSectionName="basicProfileBinding"/>

          </service>

        </services>

    </system.serviceModel>

    如上,我们给Service建立了一个Endpoint,这个EndpointAddressEp1Binding使用了Indigo自带的basicProfileBinding

     

    编译一下项目确定没有问题以后,我们可以打开IE,浏览一下:http://localhost/MathService/MathService.svc/Ep1(这个Web项目在我的电脑上的虚拟目录是http://localhost/MathService),应该可以看到Indigo服务的一些信息。

     

    第二步是创建一个Client,我们使用VS2005创建一个Console项目。在这里,我们需要用到一个Indigo自带的工具:SvcUtil,它可以帮我们自动创建一个Service Proxy文件,里面将我们调用Indigo Service所需要的接口和类创建好。

     

    我们执行:SvcUtil “http://localhost/MathService/MathService.svc/Ep1” /config:app.config

     

    SvcUtil会自动创建一个文件名称为tempuri.org.csProxy文件,将这个文件加入到项目中。第二个参数“/config:app.config”是让SvcUtil自动将所需的Indigo配置写入到app.config中,省去我们手写的麻烦。

     

    现在我们可以在Main()里面直接编码了,调用的代码非常简单:

     

    MathServiceProxy proxy = new MathServiceProxy(“MathService”);

    Console.WriteLine(proxy.Add(1, 2));

     

    运行这个程序,我们就可以看到正确的返回结果“3”。J

    我们用非常快的速度完成了一个Indigo Service和一个Indigo Client的编写。你可能觉得Indigo Service好像和Web Service没什么两样,其实他们的差别是非常大的,在以后的文章里面,我会不断的展示Indigo的各种Cool Feature

  • 相关阅读:
    c++流迭代器
    SQL Server中的临时表和表变量
    基于组件的.NET软件开发
    COM组件转换成.NET组件
    将.net组件注册为com组件
    命令提示符窗口中的快捷键
    Log4net: use Sql Server to log your application events
    Retrieving the COM class factory for component with CLSID {0002450000000000C000000000000046} failed due to the following error: 80070005.
    Office Primary Interop Assemblies
    Adding custom code to Local Reports in Visual Studio.NET 2005 (Problems & Solutions)
  • 原文地址:https://www.cnblogs.com/Dlonghow/p/1259638.html
Copyright © 2011-2022 走看看