一步步学习WCF(1):Hello
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,如下图:
<!-- 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填入地址栏中,点击前往,就会自动获取服务。获取到服务后,修改一下命名空间,如下图所示:
{
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();
}
哈哈,简单吧,这样我们就创建了一个完整的简单的WCF项目。今天早上就学习到这儿,时间不早了,洗漱上班去了,哈哈,晚上回来继续学习。。。。。。。