WCF:Windows Communication Foundation,开发代号:Indigo,是作为.NET Framework 3.0的一个组件发布的。
WCF模型中三个主要术语a、b、c ,即地址(address),绑定(binding)和契约(contract)。
下面将详细的介绍如何利用WCF为软件创建通信功能。
一、定义契约
定义接口:
public interface IEcho
{
string Echo(string input);
}
再为接口和其中的一个或多个方法添加服务模型提供的特性,将接口指定为WCF的契约,这一步就完成了
[ServiceContract]
public interface IEcho
{
[OperationContract]
string Echo(string input);
}
二、实现契约
只需要写一个实现该接口的简单类即可:
public class Service:IEcho
{
public string Echo(string input)
{
return input;
}
}
一个类如果实现了被指定为WCF契约的接口,它就成为服务类型(service type)。开发者需要告诉WCF如何把从终结点接收到的数据传送给服务类型,这将通过使用ServiceBehavior特性给服务类添加行为来控制:
[ServiceBehavior(ConcurrencyMode=ConcurrencyMode.Multiple)]
public class Service:IEcho
{
public string Echo(string input)
{
return input;
}
}
例如,并发模式行为特性可以控制WCF传送数据给服务类型时是否可以使用多并发线程。由这于这个行为需要由开发者而不是系统管理员来控制,所以使用特性进行设置——毕竟只有开发者才知道这个服务类型的内部实现是否使用了多线程来处理并发的访问。三、将服务承载到一个应用程序域。
IIS和其他任何.NET程序都可以为承载服务提供应用程序域。只要使用WCF模型提供的ServiceHost类,就可以将服务承载在任意的.NET程序中:
下面是寄宿在控制台程序中
using(ServiceHost host=new ServiceHost(typeof(Service))
{
host.open();
Console.WriteLine("The service is ready.");
Console.ReadKey(true);
host.Close();
}
三、配置服务终结点
<system.serviceModel>
<services>
<service name="WCF_Demo.Service" behaviorConfiguration="behaviorConfiguration">
<host>
<baseAddresses>
<add baseAddress="http://localhost:21111/"/>
</baseAddresses>
</host>
<endpoint address="" binding="basicHttpBinding" contract="WCF_Demo.IEcho"></endpoint>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="behaviorConfiguration">
<serviceMetadata httpGetEnabled="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
现在,终结点地址、绑定和契约都已经定义完毕,契约也实现了,服务的承载环境也已经提供,可以使用了。
如果管理员选择发布,WCF会自动生成相应的WSDL并且向需要它的请求返回该WSDL。
四、生成客户端代码和配置文件
要使用此服务,需要下载WSDL,然后生成能与服务交换数据的代码以及描述终结点信息的应用配置文件。这些操作只需要一条命令即可完成:
svcutil http://localhost:21111/?wsdl
其中svcutil是WCF的服务模型元数据工具(Service Model Metadata Tool),http://localhost:21111/?wsdl 是服务元数据的下载地址。在使用该工具产生必要的代码和配置信息之后,开发者就可以利用它们进行服务通信了。
EchoClient client = new EchoClient();
client.Open();
Response.Write(client.Echo("Hello World"));
client.Close();
五、总结
前面给出的这些步骤是WCF所需的所有步骤。总结如下:
1.服务开发者使用.NET接口定义一份契约
2.服务开发者编写一个实现该接口的类,即服务类型
3.服务开发者通过给服务类型及其方法添加特性对WCF行为作出适当的修改。
4.服务开发者为服务提供恰当的运行宿主环境。如果服务需要承载在一个。NET程序中,应先开发此程序。
5.服务管理员使用Service Configuration Editor或配置文件 配置服务的终结点,即为已经被服务类型实现的契约关联地址和绑定。
6.服务管理员使用Service Configuration Editor对WCF行为作出恰当的修改。
7.客户程序的开发者使用服务模型元数据工具下载描述服务的WSDL并生成与服务通信所需的代码和配置文件。
8.客户程序的开发者利用生成的代码和配置文件和服务通信。