WCF(一) 简单的认知
2015-06-04 12:10
337 查看
为什么要学习WCF,WCF有哪些优势
WCF合并了Web服务、.net Remoting、消息队列和Enterprise Services的功能并集成在Visual Studio中。WCF专门用于面向服务开发。
WCF能够建立一个跨平台的安全、可信赖、事务性的解决方案,是一个WebService,.Net Remoting,Enterprise Service,WSE,MSMQ的并集,有一副很经典的对比图如下:
WCF与其他分布式技术对比表
WCF程序结构
契约(Contracts): 主要定义了实现那些服务,如何访问服务服务(Services): 实现契约定义的方法
宿主程序(Hosting): 提供低层传输功能的支持
客户端(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非常好的上屏蔽了低层细节(服务器和客户端之间的通信、数据传输等),开发者只需要关注业务逻辑即可,并且非常灵活
相关文章推荐
- (C语言-数据结构与算法)还原二叉树
- 【关注图像采集视频传输】之 Cy3014 usb3.0 FIFO接口
- find用法
- Python中函数的参数定义和可变参数用法实例分析
- 实战-----使用crond 在linux中定时执行任务
- equals和==
- 1~n中1的和
- 《大话设计模式》学习笔记23:解释器模式
- 集成第三方JavaScript库
- "Invalid bound statement (not found): com.sitech.admin.dao.TbOpenAbilityInfoDao.findAbilityReadyUp"mybatis配置文件bug
- [Selenium] 操作新弹出窗口之验证标题和内容
- [安卓基础] 006.打开另一个Activity
- php单例模式
- 过滤选择器
- Android handler的警告Handler Class Should be Static or Leaks Occur
- 从尾到头打印链表
- eclipse调优
- 运动框架示例
- Java的String
- [kmp] hdu1711 字符串匹配模板