标签:wcf
WCF这个被热捧的话题,一直的身边被小伙伴们提起,那么它到底是何方神圣呢?接下来就让我们来从整体上认识一下吧!
Windows CommunicationFoundation(WCF)是由微软开发的一系列支持数据通信的应用程序框架,可以翻译为Windows 通讯开发平台。
整合了原有的windows通讯的 .netRemoting,WebService,Socket的机制,并融合有Http和Ftp的相关技术。
是Windows平台上开发分布式应用最佳的实践方式。
简单的归结为四大部分
1>.网络服务的协议,即用什么网络协议开放客户端接入。
2>.业务服务的协议,即声明服务提供哪些业务。
3>.数据类型声明,即对客户端与服务器端通信的数据部分进行一致化。
4>.传输安全性相关的定义。它是.NET框架的一部分,由.NET Framework3.0 开始引入,与Windows Presentation Foundation及Windows WorkflowFoundation并行为新一代 Windows操作系统以及 WinFX 的三个重大应用程序开发类库。
纸上得来终觉浅,那么就通过实践来感受一下wcf的作用吧!
(一)建立一个新的解决方案,这个解决方案包括两个项目,一个叫Server,另一个Client,天生一对。
新建两个控制台项目,建完后,你的VS应该和下图所示的差不多。
(二)选中“Server”项目,不要弄错了,一般来说,我们是先完成服务器端。
(1)在Server项目的“引用”上右击,从快捷菜单中选择“添加引用...”,在随后打开的窗口中,确认选定.NET选项卡,在列表中找到System.ServiceModel,然后,单击确定,这个不用我介绍了。
(2)打开Server项目的Program.cs文件,首先,要引入几个可能要用到的命名空间。
usingSystem.ServiceModel; usingSystem.ServiceModel.Description;
(3)定义一个服务协定,其中包含一个TestMethod方法,服务协定是一个接口。
[ServiceContract] public interfaceIService { [OperationContract] string TestMethod(); }
我们看到,服务协定是一个接口,但附加了ServiceContractAttribute特性,而接口中的方法也附加了OperationContractAttribute特性,作为服务操作,可以供客户端程序调用,如果不加OperationContractAttribute特性,就不向客户端公开该方法。
(4)定义一个类,并实现上面定义的服务协定。
public classMyService : IService { public string TestMethod() { return "相信自己是最棒的!"; } }
(5)在Main入口点中定义服务器相关的参数,并启动服务。
static voidMain(string[] args) { // 基址URI,必须,HTTP方案 Uri baseURI = newUri("http://localhost:8008/Service"); using (ServiceHost host = newServiceHost(typeof(MyService),baseURI)) { // 向服务器添终结点 WSHttpBinding binding = newWSHttpBinding(); // 这里不需要安全验证 binding.Security.Mode =SecurityMode.None; host.AddServiceEndpoint(typeof(IService), binding, "my"); // 为了能让VS生成客户端代码,即WSDL文档,故要添加以下行为 ServiceMetadataBehavior mdBehavior =new ServiceMetadataBehavior() { HttpGetEnabled = true }; host.Description.Behaviors.Add(mdBehavior); //如果服务顺利启动,则提示,处理Opened事件 host.Opened += (sender, e) =>Console.WriteLine("服务已启动。"); // 启动服务器 try { host.Open(); } catch (Exception ex) { Console.WriteLine(ex.Message); } // 为了让程序不往下执行而结束,故加上这句 Console.ReadKey(); // 关闭服务器 host.Close(); } }
这时候,先确认Server项目是当前选定项目,然后运行,如果成功,你会看到如下图所示的内容。
这下就恭喜你了,服务器端我们就完成了,下面轮到客户端了
(三)选定Client项目,在“引用”上右击,从快捷菜单中选择“添加服务引用”
在弹出的窗口中输入刚才定义的基址,即http://localhost:8008/Service
记住一定要用基址,就是创建ServiceHost实例时用的那个,不要用终结点地址。
单击“前往”按钮,服务读取正确后,输入你要的命名空间名字,单击确定。
这时候,我们就可以在客户端写代码了
static voidMain(string[] args) { WS.ServiceClient client = newWS.ServiceClient(); Console.WriteLine(client.TestMethod()); Console.ReadKey(); }
运行一下,我们的第一个WCF应用程序就完成了。
(一)统一性
前面已经叙述,WCF是对于ASMX,.Net Remoting,EnterpriseService,WSE,MSMQ等技术的整合。由于WCF完全是由托管代码编写,因此开发WCF的应用程序与开发其它的.Net应用程序没有太大的区别,我们仍然可以像创建面向对象的应用程序那样,利用WCF来创建面向服务的应用程序。
(二)互操作性
由于WCF最基本的通信机制是SOAP(Simple Object AccessProtocol 简易对象访问协议),这就保证了系统之间的互操作性,即使是运行不同的上下文中。这种通信可以是基于.Net到.Net间的通信。
(三)安全与可信赖
WS-Security,WS-Trust和WS-SecureConversation均被添加到SOAP消息中,以用于用户认证,数据完整性验证,数据隐私等多种安全因素。
(四)兼容性
WCF充分的考虑到了与旧有系统的兼容性。安装WCF并不会影响原有的技术如ASMX和.NetRemoting。即使对于WCF和ASMX而言,虽然两者都使用了SOAP,但基于WCF开发的应用程序,仍然可以直接与ASMX进行交互。
标签:wcf
原文地址:http://blog.csdn.net/liu_yujie2011com/article/details/43935421