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

原文地址:https://www.cnblogs.com/Dlonghow/p/1259638.html