博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WCF(一) 简单的认知
阅读量:5343 次
发布时间:2019-06-15

本文共 2835 字,大约阅读时间需要 9 分钟。

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

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

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

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

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

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服务引用

 

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

转载于:https://www.cnblogs.com/ilooking/p/4551427.html

你可能感兴趣的文章
一个.NET通用JSON解析/构建类的实现(c#)
查看>>
详谈js面向对象 javascript oop,持续更新
查看>>
关于这次软件以及pda终端的培训
查看>>
如何辨别一个程序员的水平高低?是靠发量吗?
查看>>
新手村之循环!循环!循环!
查看>>
线程安全问题
查看>>
linux的子进程调用exec( )系列函数
查看>>
MySQLdb & pymsql
查看>>
zju 2744 回文字符 hdu 1544
查看>>
【luogu P2298 Mzc和男家丁的游戏】 题解
查看>>
前端笔记-bom
查看>>
上海淮海中路上苹果旗舰店门口欲砸一台IMAC电脑维权
查看>>
Google透露Android Market恶意程序扫描服务
查看>>
给mysql数据库字段值拼接前缀或后缀。 concat()函数
查看>>
迷宫问题
查看>>
【FZSZ2017暑假提高组Day9】猜数游戏(number)
查看>>
泛型子类_属性类型_重写方法类型
查看>>
对闭包的理解
查看>>
练习10-1 使用递归函数计算1到n之和(10 分
查看>>
Oracle MySQL yaSSL 不明细节缓冲区溢出漏洞2
查看>>