zoukankan      html  css  js  c++  java
  • 第一个Indigo Service

    我第一次尝试Indigo,是使用的VS 2005 PD6 + Indigo SDR2.0.40903)这个版本,那个SDR的版本和现在公开发布的CTP版本已经有不少的差别了。现在我已经把我的Indigo运行环境更新到了VS2005 PD78.0.50110.30,也就是公开的Feb CTP版本) + Indigo CTP2.0.50110.20),这两个版本能够非常好的一起工作。但是注意,现在的这个Indigo CTP是不能在即将发布的VS2005 Beta2上跑的,而当VS2005 Beta2发布的时候,预计Indigo也会相应的发布一个配套的版本。

     

    在谈到更具体的话题之前,先说说什么是Indigo?最官方的答案是:“Indigo是一组用于构建和运行Connected System.Net技术集合,是用于构建面向服务系统的通讯基础组件”。如果要具有“煽动性”一些,那么可以用这样的话:“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目录下):

     

    [ServiceContract]

    public class MathService

    {

           [OperationContract]

           public Int32 Add(Int32 value1, Int32 value2)

           {

                  return value1 + value2;

           }

    }

     

    如上,我们建立了一个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

     

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

  • 相关阅读:
    HTTP响应状态码整理
    Python通用爬虫,聚焦爬虫概念理解
    HTTP无状态协议理解
    会话与事务知识点总结
    并发一致性知识点整理
    使用隔离级别read committed隐式解决并发冲突
    多并发笔记整理
    git基本使用
    Docker其他
    Docker Bind Mount 与 Volume
  • 原文地址:https://www.cnblogs.com/kaneboy/p/2436832.html
Copyright © 2011-2022 走看看