第一个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





本文转自 kaneb0y 51CTO博客,原文链接:http://blog.51cto.com/kaneboy/281328,如需转载请自行联系原作者
目录
相关文章
|
3月前
|
存储 应用服务中间件 开发工具
Platform as a Service
PaaS(Platform as a Service,平台即服务)是一种云计算服务模型,它提供了一组开发工具和服务,使开发人员可以构建和部署应用程序,而无需关心底层基础设施的管理。PaaS 通常包括一个操作系统级别的基础设施、服务器、存储和网络服务,以及一系列开发工具和服务,如数据库、Web 服务器、应用服务器、消息传递、身份认证等。
56 2
Platform as a Service
|
2月前
|
安全
[UDS] --- SecurityAccess 0x27 service
[UDS] --- SecurityAccess 0x27 service
36 0
|
2月前
[UDS] --- DiagnosticSessionControl 0x10 service
[UDS] --- DiagnosticSessionControl 0x10 service
56 0
|
Android开发
Android源码分析--Service的启动和绑定
Android源码分析--Service的启动和绑定
272 0
Android源码分析--Service的启动和绑定
如何使用代码区分service contract和service contract quotation
SAP standard deliver的service contract和service contract quotation的transaction type分别为SC1和SCQ1:
122 0
如何使用代码区分service contract和service contract quotation
|
弹性计算 Kubernetes Docker
Alibaba Cloud Container Service vs. Amazon EC2 Container Service vs. Azure Container Service
Containers have increasingly become the preferred way to run applications at scale in the cloud. Yet when running applications in production, organizations leave nothing to chance.
3284 0