码迷,mamicode.com
首页 > 其他好文 > 详细

菜鸟眼中的WCF(1)

时间:2015-02-25 11:43:17      阅读:143      评论:0      收藏:0      [点我收藏+]

标签: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(1)

标签:wcf

原文地址:http://blog.csdn.net/liu_yujie2011com/article/details/43935421

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!