zoukankan      html  css  js  c++  java
  • WCF(一) 简单的认知

    为什么要学习WCF,WCF有哪些优势

    WCF合并了Web服务、.net Remoting、消息队列和Enterprise Services的功能并集成在Visual Studio中。

    WCF专门用于面向服务开发。

    WCF能够建立一个跨平台的安全、可信赖、事务性的解决方案,是一个WebService,.Net Remoting,Enterprise Service,WSE,MSMQ的并集,有一副很经典的对比图如下:

    WCF与其他分布式技术对比表

    2012092613354972

    WCF程序结构

    1. 契约(Contracts):    主要定义了实现那些服务,如何访问服务

    2. 服务(Services):        实现契约定义的方法

    3. 宿主程序(Hosting):    提供低层传输功能的支持

    4. 客户端(Client):        根据契约访问服务

    契约

    namespace WcfStudy
    {
        // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的接口名“IMyFirstSerice”。
        [ServiceContract]
        public interface IMyFirstSerice
        {
            [OperationContract]
            string SayHello(string name);
        }
    }

    这里定义的wcf契约类似定义一个服务接口,ServiceContract表示这是一个WCF契约服务接口,OperationContract表示这是一个WCF接口服务方法

    服务

    namespace WcfStudy
    {
        // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码、svc 和配置文件中的类名“MyFirstSerice”。
        // 注意: 为了启动 WCF 测试客户端以测试此服务,请在解决方案资源管理器中选择 MyFirstSerice.svc 或 MyFirstSerice.svc.cs,然后开始调试。
        public class MyFirstSerice : IMyFirstSerice
        {
            public string  SayHello(string name)
            {
                 return  "Hello "+name;
            }
        }
    }

    这里定义了一一个服务来实现契约中要求的方法

    宿主程序

    WCF在运行时必寄宿在“宿主程序”之上,WCF本身不能够独自运行(每个WCF服务必须宿主在一个Windows进程中)。

    WCF服务应用程序与WCF服务库的不同

    WCF服务应用程序,是一个可以执行的程序,它有独立的进程,WCF服务类契约的定义,可以直接看到运行的效果。此项目模板基于IIS托管的程序

    WCF服务库,可以认为是一个包含WCF服务以及契约定义的类库。不能直接运行,你可以在其他项目里引用,在宿主里启用托管这个库,有点类似于我们在Web项目中应用的类库。我们需要为此服务库添加一个宿主

    WCF的宿主可以是 Windows 服务、COM+应用程序、WAS(Windows Activation Services,Windows进程激活服务)或IIS、Windows应用程序,或简单的控制台应用程序及任何.net程序。

    如何为wcf添加一个宿主?

    1.使用控制台应用程序作为wcf宿主

    //创建宿主的基地址
                Uri baseAddress = new Uri("http://localhost:8080/User");
                //创建宿主
                using (ServiceHost host = new ServiceHost(typeof(User), baseAddress))
                {
                    //向宿主中添加终结点
                    host.AddServiceEndpoint(typeof(IUser), new WSHttpBinding(), "");
                    //将HttpGetEnabled属性设置为true
                    ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
                    smb.HttpGetEnabled = true;
                    //将行为添加到Behaviors中
                    host.Description.Behaviors.Add(smb);
                    //打开宿主
                    host.Open();
                    Console.WriteLine("WCF中的HTTP监听已启动....");
                    Console.ReadLine();
                    host.Close();
                }

    为客户端添加wcf服务引用

    image

    public ActionResult GetWcfResult()
            {
                return View();
            }
    
            [HttpPost]
            public ActionResult GetWcfResult(string name)
            {
                //UserClient userClient = new UserClient();
                MyFirstSericeClient myFirstSericeClient = new MyFirstSericeClient();
                string temp = myFirstSericeClient.SayHello(name);
                ViewBag.username = temp;
                return View();
            }

    在mvc客户端中调用wcf服务

    MyFirstSericeClient是在客户端添加服务引用后生成的,其命名规则是为服务名+Client

    基本类似的添加宿主服务和上边差不多,总之wcf一定是要寄宿在宿主程序中去的

    客户端

    这里使用一个简单的mvc例子作为客户端,客户端只需要添加服务引用后即可对wcf服务使用

    WCF非常好的上屏蔽了低层细节(服务器和客户端之间的通信、数据传输等),开发者只需要关注业务逻辑即可,并且非常灵活

  • 相关阅读:
    Web--js高级--12月19日随笔
    Web--js高级--12月18日随笔
    Web--js高级--12月17日随笔
    Web--js高级--关于所学闭包随笔
    Web--js高级--12月10日随笔
    Web--js高级--12月4日随笔
    Web--js高级--12月3日随笔
    微信小程序预览图片
    开发微信“小程序”必学教程
    navigator 页面链接
  • 原文地址:https://www.cnblogs.com/ilooking/p/4551427.html
Copyright © 2011-2022 走看看