1.什么是WCF
Windows通信基础(Windows Communication Foundation,简称WCF)是基于Windows平台下开发和部署服务的软件开发包(Software Development Kit,SDK)。WCF为服务提供了运行时环境(Runtime Environment),使得开发者能够将CLR类型公开为服务,又能够以CLR类型的方式使得创建服务的任务事半功倍。WCF是微软对一系列产业标准定义的实现,包括服务交互、类型转换、封送(Marshaling)以及各种协议的管理。正因为如此WCF才能够提供服务之间的互操作性。WCF为服务开发提供了许多有用的功能,包括托管(Hosting)、服务实例管理(Service Instance Management)、异步调用、可靠性、事务管理、离线队列调用(Disconnected Queued Call)以及安全性。同时,WCF还提供了设计优雅的可扩展模型,使开发人员能够丰富它的基础功能。事实上,WCF自身的实现正是利用了这样的一种可扩展型。本书的其余章节会专注于介绍诸多方面的内容与特征。WCF的大部分功能都包含在一个单独的程序集 System.ServiceModel.dll 中,命名空间为 System.ServiceModel 。
WCF是使用托管代码建立和运行面向服务(Service Oriented)应用程序的统一框架。它使得开发者能够建立一个跨平台的、安全、可信赖、事务性的解决方案,且能与已有系统兼容协作。WCF是微软分布 式应用程序开发的集大成者,它整合了.Net平台下所有的和分布式系统有关的技术,例如.Net Remoting、ASMX、WSE和MSMQ。以通信(Communiation)范围而论,它可以跨进程、跨机器、跨子网、企业网乃至于 Internet;以宿主程序而论,可以以ASP.NET,EXE,WPF,Windows Forms,NT Service,COM+作为宿主(Host)。WCF可以支持的协议包括TCP,HTTP,跨进程以及自定义,安全模式则包括SAML, Kerberos,X509,用户/密码,自定义等多种标准与模式。也就是说,在WCF框架下,开发基于SOA的分布式系统变得容易了,微软将所有与此相 关的技术要素都包含在内,掌握了WCF,就相当于掌握了叩开SOA大门的钥匙。
2.WCF之Hello
我们了解了什么是WCF之后,先来看一个简单的实例:Hello(开发环境VS2008SP1)
开发步骤:
第一步:打开VS2008,新建项目,选择Visual c#,.NET Framework选择3.5 选择已安装的模板WCF 服务应用程序模板,并将项目改名为Hello,如下图:
![](https://i-blog.csdnimg.cn/blog_migrate/6e39aecb05d07222d0cb8ac4cb974319.jpeg)
<!-- Service Endpoints -->
< endpoint address ="" binding ="wsHttpBinding" contract ="hello.IService1" >
<!--
部署时,应删除或替换下列标识元素,以反映
在其下运行部署服务的标识。删除之后,WCF 将
自动推导相应标识。
-->
< identity >
< dns value ="localhost" />
</ identity >
</ endpoint >
< endpoint address ="mex" binding ="mexHttpBinding" contract ="IMetadataExchange" />
</ service >
< serviceMetadata httpGetEnabled ="true" />
< serviceDebug includeExceptionDetailInFaults ="false" />
</ behavior >
< services >
< service behaviorConfiguration ="Hello.HelloBehavior" name ="Hello.Hello" >
< endpoint address ="" binding ="wsHttpBinding" contract ="Hello.IHello" >
< identity >
< dns value ="localhost" />
</ identity >
</ endpoint >
< endpoint address ="mex" binding ="mexHttpBinding" contract ="IMetadataExchange" />
</ service >
</ services >
< behaviors >
< serviceBehaviors >
< behavior name ="Hello.HelloBehavior" >
< serviceMetadata httpGetEnabled ="true" />
< serviceDebug includeExceptionDetailInFaults ="false" />
</ behavior >
</ serviceBehaviors >
</ behaviors >
</ system.serviceModel >
4.我们将IHello.cs修改为:
public interface IHello
{
[OperationContract]
string SayHello( string Name);
}
5.我们在Hello.svc中实现IHello中的SayHello:
{
return " Hello, " + Name;
}
< asp:Button ID ="Button1" runat ="server" onclick ="Button1_Click" Text ="Button" />
7.添加Hello服务引用:将Hello服务设为启动项,将Hello.svc设为起始页,运行得到服务地址http://localhost:3095/Hello.svc,我们在Client的项目中添加服务引用,将http://localhost:3095/Hello.svc填入地址栏中,点击前往,就会自动获取服务。获取到服务后,修改一下命名空间,如下图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/a6970485a08f41cd7af54273e2004a9b.jpeg)
{
ServiceReferenceHello.HelloClient proxy = new Client.ServiceReferenceHello.HelloClient();
Page.ClientScript.RegisterStartupScript(
this .GetType(),
" js " ,
string .Format( " alert('{0}') " , proxy.SayHello(TextBox1.Text.ToString())),
true );
proxy.Close();
}
![](https://i-blog.csdnimg.cn/blog_migrate/cdf86f82d5da7f3c3a60c909759d5427.jpeg)
哈哈,简单吧,这样我们就创建了一个完整的简单的WCF项目。今天早上就学习到这儿,时间不早了,洗漱上班去了,哈哈,晚上回来继续学习。。。。。。。
Hello源代码: http://files.cnblogs.com/peida/hello.rar