创建第一个简单WCF服务
2010-12-19 21:08
316 查看
步骤一:构建整个解决方案
通过VS
2008创建一个空白的解决方案,添加如下四个项目。项目的类型、承载的功能和相互引用关系如下,整个项目在VS下的结构如图2
所示。
Contracts
:
一个类库项目,定义服务契约(Service
Contract),引用System.ServiceMode程序集(WCF框架的绝大部分实现和API定义在该程序集中);
Services
:
一个类库项目,提供对WCF服务的实现。定义在该项目中的所有WCF服务实现了定义在Contracts中相应的服务契约,所以Services具有对Contracts项目的引用;
Hosting
:
一个控制台(Console)应用,实现对定义在Services项目中的服务的寄宿,该项目须要同时引用Contracts和Services两个项目和System.ServiceMode程序集;
Client
:
一个控制台应用模拟服务的客户端,该项目引用System.ServiceMode程序集。
步骤二:创建服务契约
WCF采用基于契约的交互方式实现了服务的自治,以及客户端和服务端之间的松耦合。WCF包含四种类型的契约:服务契约、数据契约、消息契约和错误契约,这里着重于服务契约。从功能上讲,服务契约抽象了服务提供的所有操作;而站在消息交换的角度来看,服务契约则定义了基于服务调用的消息交换过程中,请求消息和回复消息的结构,以及采用的消息交换模式。第4章将提供对服务契约的详细介绍。
一般地,我们通过接口的形式定义服务契约。通过下面的代码,将一个接口ICalculator定义成服务契约。WCF广泛采用基于自定义特性(Custom
Attribtue)的声明式编程模式,我们通过在接口上应用System.ServiceModel.ServiceContractAttribute
特性将一个接口定义成服务契约。在应用ServiceContractAttribute特性的同时,还可以指定服务契约的名称和命名空间。至于契约名称和命名空间的含义和作用,在本人拙著《WCF技术剖析(卷1)
》第4章,在这里我们将契约名称和命名空间设置成CalculatorService和http://www.artech.com/
)。
通过应用ServiceContractAttribute特性将接口定义成服务契约之后,接口的方法成员并不能自动成为服务的操作。在此方面,WCF采用的是显式选择(Explicit
Opt-in)的策略:我们须要在相应的操作方法上面显式地应用OperationContractAttribute特性。
接下来定义接口 实现 加 减 乘 除
步骤三:创建服务
当服务契约成功创建时,我们需要通过实现服务契约来创建具体的WCF服务。WCF服务CalculatorService定义在Services项目中,实现了服务契约接口ICalculator,实现了所有的服务操作。CalculatorService定义如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Services
{
//第一步 创建契约服务
//创建服务 实现契约的ICalulator接口中的方法
public class CalculatorService:Contracts.ICalculator
{
#region ICalculator Members 实现ICalculator接口 创建服务
public double Add(double X, double Y)
{
return X + Y;
}
public double Subtract(double x, double y)
{
return x - y;
}
public double Multiply(double x, double y)
{
return x * y;
}
public double Divide(double x, double y)
{
return x / y;
}
#endregion
}
}
步骤四:通过自我寄宿的方式寄宿服务
WCF服务需要依存一个运行着的进程(宿主),服务寄宿就是为服务指定一个宿主的过程。WCF是一个基于消息的通信框架,采用基于终结点(Endpoint)的通信手段。终结点由地址(Address)、绑定(Binding)和契约(Contract)三要素组成,如图3
所示。由于三要素应为首字母分别为ABC,所以就有了易于记忆的公式:Endpoint
= ABC。一个终结包含了实现通信所必需的所有信息,我们可以这样认识终结点的ABC:
地址(
Address
):
地址决定了服务的位置,解决了服务寻址的问题,《WCF技术剖析(卷1)
》第2章提供了对地址和寻址机制的详细介绍;
绑定(
Binding
):
绑定实现了通信的所有细节,包括网络传输、消息编码,以及其他为实现某种功能(比如安全、可靠传输、事务等)对消息进行的相应处理。WCF中具有一系列的系统定义绑定,比如BasicHttpBinding、WsHttpBinding、NetTcpBinding等,《WCF技术剖析(卷1)
》第3章提供对绑定的详细介绍;
契约(
Contract
):
契约是对服务操作的抽象,也是对消息交换模式以及消息结构的定义。《WCF技术剖析(卷1)
》第4章提供对服务契约的详细介绍
在进行真正的WCF应用开发时,一般不会直接通过编码的方式进行终结点的添加和服务行为的定义,而是通过配置的方式进行。上面添加终结点和定义服务行为的代码可以用下面的配置代替:
原文出自:http://www.cnblogs.com/artech/archive/2007/02/26/656901.html
通过VS
2008创建一个空白的解决方案,添加如下四个项目。项目的类型、承载的功能和相互引用关系如下,整个项目在VS下的结构如图2
所示。
Contracts
:
一个类库项目,定义服务契约(Service
Contract),引用System.ServiceMode程序集(WCF框架的绝大部分实现和API定义在该程序集中);
Services
:
一个类库项目,提供对WCF服务的实现。定义在该项目中的所有WCF服务实现了定义在Contracts中相应的服务契约,所以Services具有对Contracts项目的引用;
Hosting
:
一个控制台(Console)应用,实现对定义在Services项目中的服务的寄宿,该项目须要同时引用Contracts和Services两个项目和System.ServiceMode程序集;
Client
:
一个控制台应用模拟服务的客户端,该项目引用System.ServiceMode程序集。
步骤二:创建服务契约
WCF采用基于契约的交互方式实现了服务的自治,以及客户端和服务端之间的松耦合。WCF包含四种类型的契约:服务契约、数据契约、消息契约和错误契约,这里着重于服务契约。从功能上讲,服务契约抽象了服务提供的所有操作;而站在消息交换的角度来看,服务契约则定义了基于服务调用的消息交换过程中,请求消息和回复消息的结构,以及采用的消息交换模式。第4章将提供对服务契约的详细介绍。
一般地,我们通过接口的形式定义服务契约。通过下面的代码,将一个接口ICalculator定义成服务契约。WCF广泛采用基于自定义特性(Custom
Attribtue)的声明式编程模式,我们通过在接口上应用System.ServiceModel.ServiceContractAttribute
特性将一个接口定义成服务契约。在应用ServiceContractAttribute特性的同时,还可以指定服务契约的名称和命名空间。至于契约名称和命名空间的含义和作用,在本人拙著《WCF技术剖析(卷1)
》第4章,在这里我们将契约名称和命名空间设置成CalculatorService和http://www.artech.com/
)。
通过应用ServiceContractAttribute特性将接口定义成服务契约之后,接口的方法成员并不能自动成为服务的操作。在此方面,WCF采用的是显式选择(Explicit
Opt-in)的策略:我们须要在相应的操作方法上面显式地应用OperationContractAttribute特性。
接下来定义接口 实现 加 减 乘 除
using System; using System.Collections.Generic; using System.Linq; using System.Text; //导入命名空间 using System.ServiceModel; using System.Runtime.Serialization; namespace Contracts { //定义接口 创建服务契约 [ServiceContract(Name="CalcuatorService")] public interface ICalculator { [OperationContract] double Add(double X, double Y); [OperationContract] double Subtract(double x, double y); [OperationContract] double Multiply(double x, double y); [OperationContract] double Divide(double x, double y); } }
步骤三:创建服务
当服务契约成功创建时,我们需要通过实现服务契约来创建具体的WCF服务。WCF服务CalculatorService定义在Services项目中,实现了服务契约接口ICalculator,实现了所有的服务操作。CalculatorService定义如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Services
{
//第一步 创建契约服务
//创建服务 实现契约的ICalulator接口中的方法
public class CalculatorService:Contracts.ICalculator
{
#region ICalculator Members 实现ICalculator接口 创建服务
public double Add(double X, double Y)
{
return X + Y;
}
public double Subtract(double x, double y)
{
return x - y;
}
public double Multiply(double x, double y)
{
return x * y;
}
public double Divide(double x, double y)
{
return x / y;
}
#endregion
}
}
步骤四:通过自我寄宿的方式寄宿服务
WCF服务需要依存一个运行着的进程(宿主),服务寄宿就是为服务指定一个宿主的过程。WCF是一个基于消息的通信框架,采用基于终结点(Endpoint)的通信手段。终结点由地址(Address)、绑定(Binding)和契约(Contract)三要素组成,如图3
所示。由于三要素应为首字母分别为ABC,所以就有了易于记忆的公式:Endpoint
= ABC。一个终结包含了实现通信所必需的所有信息,我们可以这样认识终结点的ABC:
地址(
Address
):
地址决定了服务的位置,解决了服务寻址的问题,《WCF技术剖析(卷1)
》第2章提供了对地址和寻址机制的详细介绍;
绑定(
Binding
):
绑定实现了通信的所有细节,包括网络传输、消息编码,以及其他为实现某种功能(比如安全、可靠传输、事务等)对消息进行的相应处理。WCF中具有一系列的系统定义绑定,比如BasicHttpBinding、WsHttpBinding、NetTcpBinding等,《WCF技术剖析(卷1)
》第3章提供对绑定的详细介绍;
契约(
Contract
):
契约是对服务操作的抽象,也是对消息交换模式以及消息结构的定义。《WCF技术剖析(卷1)
》第4章提供对服务契约的详细介绍
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ServiceModel; //引用服务 using Services; //引用契约 using Contracts; using System.ServiceModel.Description; namespace Hosting { class Program { static void Main(string[] args) { //创建主机服务对象 ServiceHost typeof(为创建 服务对象 继承接口实现方法的类) 参数为 TypeOf(服务对象 创建服务对象 实现ICalcuator接口的类 using (ServiceHost host = new ServiceHost(typeof(CalculatorService))) { //主机添加AddServiceEndPoint(typeof(定义接口类), new WSHttpBinding(),"url地址") host.AddServiceEndpoint(typeof(ICalculator), new WSHttpBinding(), "http://127.0.0.1:9999/calculatorservice"); if (host.Description.Behaviors.Find<ServiceMetadataBehavior>() == null) { //添加服务 创建 服务说明 ServiceMetadataBehavior behaior = new ServiceMetadataBehavior(); //是否启用Get Url方法 behaior.HttpGetEnabled = true; //访问的地址 behaior.HttpGetUrl = new Uri("http://127.0.0.1:9999/calculatorservice"); host.Description.Behaviors.Add(behaior); //己经打开服务的事件 host.Opened += delegate { Console.WriteLine("CalculaorService已经启动,按任意键终止服务!"); }; host.Open(); Console.Read(); } } } } }
在进行真正的WCF应用开发时,一般不会直接通过编码的方式进行终结点的添加和服务行为的定义,而是通过配置的方式进行。上面添加终结点和定义服务行为的代码可以用下面的配置代替:
1: <?xml version="1.0" encoding="utf-8" ?> 2: <configuration> 3: <system.serviceModel> 4: <behaviors> 5: <serviceBehaviors> 6: <behavior name="metadataBehavior"> 7: <serviceMetadata httpGetEnabled="true" httpGetUrl="http://127.0.0.1:9999/calculatorservice/metadata" /> 8: </behavior> 9: </serviceBehaviors> 10: </behaviors> 11: <services> 12: <service behaviorConfiguration="metadataBehavior" name="Artech.WcfServices.Services.CalculatorService"> 13: <endpoint address="http://127.0.0.1:9999/calculatorservice" binding="wsHttpBinding" contract="Artech.WcfServices.Contracts.ICalculator" /> 14: </service> 15: </services> 16: </system.serviceModel> 17: </configuration>
原文出自:http://www.cnblogs.com/artech/archive/2007/02/26/656901.html
相关文章推荐
- WCF开发实战系列一:创建第一个WCF服务
- 使用VS2008创建发布一个简单的WCF服务,并引入到web应用程序
- 创建第一个WCF服务
- 【MSH】如何开发第一个最简单的WCF模块服务(附实例源码)
- WCF开发实战系列一:创建第一个WCF服务
- WCF开发实战系列一:创建第一个WCF服务
- 通过VS创建简单的WCF服务
- WCF开发实战系列一:创建第一个WCF服务
- ASP.NET 创建发布一个简单的wcf服务
- WCF开发实战系列一:创建第一个WCF服务
- wcf创建基于tcp协议的iis寄宿服务的第一个例子
- WCF开发实战系列一:创建第一个WCF服务 (原创:灰灰虫的家http://hi.baidu.com/grayworm)
- WCF开发实战系列一:创建第一个WCF服务
- 创建第一个WCF服务
- 创建简单的WCF服务(转)
- WCF开发实战系列一:创建第一个WCF服务
- WCF 第一个用 Visual Studio 2010 创建的WCF服务
- Wcf Ria Services学习笔记(二):创建一个简单WCF RIA Service服务
- WCF服务二:创建一个简单的WCF服务程序
- WCF开发实战系列一:创建第一个WCF服务